From c24f079c44d32c3b4235f2c4b60b0f7eb54cffdd Mon Sep 17 00:00:00 2001 From: Christian U Date: Sun, 4 Oct 2015 09:27:13 +0200 Subject: [PATCH 01/25] Make Version compileable in actual Lazarus --- .../Components/Sources/Core/PythonEngine.pas | 8 +- PythonForDelphi/Components/p4dlaz.lpk | 213 ++++++--------- PythonForDelphi/Components/p4dlaz.pas | 52 ++-- PythonForDelphi/Demos/FPC/Demo31/Project1.lpi | 257 +++++------------- PythonForDelphi/Demos/FPC/Demo31/Project1.lpr | 10 +- PythonForDelphi/Demos/FPC/Demo31/Unit1.pas | 18 +- PythonForDelphi/Demos/FPC/Demo31/Unit2.lfm | 14 +- PythonForDelphi/Demos/FPC/Demo31/Unit2.pas | 2 +- 8 files changed, 202 insertions(+), 372 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index 9900134a..e1343cd6 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -72,7 +72,7 @@ interface {$ENDIF} {$IFDEF LINUX} Types, - Libc, + dynlibs, {$ENDIF} Classes, SysUtils, @@ -3374,8 +3374,12 @@ function TDynamicDll.Import(const funcname: AnsiString; canFail : Boolean = True begin Result := GetProcAddress( FDLLHandle, PAnsiChar(funcname) ); if (Result = nil) and canFail then begin + {$IFDEF MSWINDOWS} E := EDllImportError.CreateFmt('Error %d: could not map symbol "%s"', [GetLastError, funcname]); E.ErrorCode := GetLastError; + {$ELSE} + E := EDllImportError.CreateFmt('Error: could not map symbol "%s"', [funcname]); + {$ENDIF} E.WrongFunc := funcname; raise E; end; @@ -3444,7 +3448,7 @@ procedure TDynamicDll.Quit; {$ENDIF} {$IFDEF LINUX} WriteLn(ErrOutput, GetQuitMessage); - __exit( 1 ); + Halt( 1 ); {$ENDIF} end; end; diff --git a/PythonForDelphi/Components/p4dlaz.lpk b/PythonForDelphi/Components/p4dlaz.lpk index e364ad4b..afdb8f03 100644 --- a/PythonForDelphi/Components/p4dlaz.lpk +++ b/PythonForDelphi/Components/p4dlaz.lpk @@ -1,128 +1,85 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PythonForDelphi/Components/p4dlaz.pas b/PythonForDelphi/Components/p4dlaz.pas index 1e56778f..7980a0cb 100644 --- a/PythonForDelphi/Components/p4dlaz.pas +++ b/PythonForDelphi/Components/p4dlaz.pas @@ -1,27 +1,25 @@ -{ This file was automatically created by Lazarus. Do not edit! - This source is only used to compile and install the package. - } - -unit P4DLaz; - -interface - -uses - PythonEngine, PythonGUIInputOutput, MethodCallBack, WrapDelphiWindows, - TinyWideStrings, VarPyth, WrapDelphi, WrapDelphiActnList, WrapDelphiButtons, - WrapDelphiClasses, WrapDelphiComCtrls, WrapDelphiControls, - WrapDelphiExtCtrls, WrapDelphiForms, WrapDelphiGraphics, WrapDelphiGrids, - WrapDelphiStdCtrls, WrapDelphiTypes, WrapDelphiVCL, LazarusPackageIntf; - -implementation -{$R Sources\Core\PythonEngine.dcr} -procedure Register; -begin - RegisterUnit('PythonEngine', @PythonEngine.Register); - RegisterUnit('PythonGUIInputOutput', @PythonGUIInputOutput.Register); - RegisterUnit('WrapDelphi', @WrapDelphi.Register); -end; - -initialization - RegisterPackage('P4DLaz', @Register); -end. +{ This file was automatically created by Lazarus. Do not edit! + This source is only used to compile and install the package. + } + +unit P4DLaz; + +interface + +uses + PythonEngine, PythonGUIInputOutput, MethodCallBack, TinyWideStrings, + VarPyth, WrapDelphi, WrapDelphiButtons, WrapDelphiClasses, + WrapDelphiControls, WrapDelphiTypes, LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('PythonEngine', @PythonEngine.Register); + RegisterUnit('PythonGUIInputOutput', @PythonGUIInputOutput.Register); + RegisterUnit('WrapDelphi', @WrapDelphi.Register); +end; + +initialization + RegisterPackage('P4DLaz', @Register); +end. diff --git a/PythonForDelphi/Demos/FPC/Demo31/Project1.lpi b/PythonForDelphi/Demos/FPC/Demo31/Project1.lpi index 8952b830..9645cf5e 100644 --- a/PythonForDelphi/Demos/FPC/Demo31/Project1.lpi +++ b/PythonForDelphi/Demos/FPC/Demo31/Project1.lpi @@ -1,4 +1,4 @@ - + @@ -11,7 +11,6 @@ - @@ -41,15 +40,12 @@ - + - - - - - + + @@ -61,10 +57,7 @@ - - - - + @@ -77,11 +70,8 @@ - - - - - + + @@ -90,82 +80,63 @@ - - + - - - - + - - - + - - - + - + - - - + - - - - + - - - - + - - - - + @@ -174,8 +145,7 @@ - - + @@ -184,50 +154,39 @@ - - - + - - - + - + - - - + - - - - + - - - + @@ -236,188 +195,120 @@ - - - + - - - + - - - + - + - - - - + - - - - + - - - + - + + + + + + + + + + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -434,12 +325,6 @@ - - - - - - diff --git a/PythonForDelphi/Demos/FPC/Demo31/Project1.lpr b/PythonForDelphi/Demos/FPC/Demo31/Project1.lpr index 5f275f4a..e0602e45 100644 --- a/PythonForDelphi/Demos/FPC/Demo31/Project1.lpr +++ b/PythonForDelphi/Demos/FPC/Demo31/Project1.lpr @@ -1,18 +1,12 @@ program Project1; -{$I Definition.Inc} +{.$I Definition.Inc} uses Interfaces, Forms, Unit1 in 'Unit1.pas' {Form1}, - WrapDelphiExtCtrls in '..\..\Components\Sources\Core\WrapDelphiExtCtrls.pas', WrapDelphiTypes in '..\..\Components\Sources\Core\WrapDelphiTypes.pas', - Unit2 in 'Unit2.pas' {TestForm}, - WrapDelphiWindows in '..\..\Components\Sources\Core\WrapDelphiWindows.pas', - WrapDelphiComCtrls in '..\..\Components\Sources\Core\WrapDelphiComCtrls.pas', - WrapDelphiGrids in '..\..\Components\Sources\Core\WrapDelphiGrids.pas', - WrapDelphiGraphics in '..\..\Components\Sources\Core\WrapDelphiGraphics.pas', - WrapDelphiButtons in '..\..\Components\Sources\Core\WrapDelphiButtons.pas'; + Unit2 in 'Unit2.pas' {TestForm}; {$R *.res} diff --git a/PythonForDelphi/Demos/FPC/Demo31/Unit1.pas b/PythonForDelphi/Demos/FPC/Demo31/Unit1.pas index 739fbc8d..e3ce24bf 100644 --- a/PythonForDelphi/Demos/FPC/Demo31/Unit1.pas +++ b/PythonForDelphi/Demos/FPC/Demo31/Unit1.pas @@ -1,18 +1,12 @@ unit Unit1; -{$I Definition.Inc} +{.$I Definition.Inc} interface uses - SysUtils, Classes, -{$IFDEF MSWINDOWS} - Windows, Messages, Graphics, Controls, Forms, Dialogs, + SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, -{$ENDIF} -{$IFDEF LINUX} - QForms, QStdCtrls, QControls, QExtCtrls, -{$ENDIF} PythonEngine, PythonGUIInputOutput, WrapDelphi, ActnList; type @@ -47,12 +41,8 @@ implementation Uses TypInfo, -{$IFNDEF FPC} - ObjAuto, -{$ENDIF} Variants, - VarPyth, - WrapDelphiVCL; + VarPyth; ////////////////////////////////////////////////////////////////////////// @@ -79,7 +69,7 @@ function TTestBase.DoubleDValue : double; type {$TYPEINFO ON} {$IFNDEF FPC}{$METHODINFO ON}{$ENDIF} -TTestClass = class(TTestBase, IFreeNotification, IInterface) +TTestClass = class(TTestBase, IFreeNotification) private fSValue : string; fIValue : integer; diff --git a/PythonForDelphi/Demos/FPC/Demo31/Unit2.lfm b/PythonForDelphi/Demos/FPC/Demo31/Unit2.lfm index a8c7317d..75d6772b 100644 --- a/PythonForDelphi/Demos/FPC/Demo31/Unit2.lfm +++ b/PythonForDelphi/Demos/FPC/Demo31/Unit2.lfm @@ -5,20 +5,20 @@ object TestForm: TTestForm Width = 614 ClientHeight = 341 ClientWidth = 614 - LCLVersion = '0.9.30.2' + LCLVersion = '1.5' object CheckBox1: TCheckBox Left = 96 - Height = 19 + Height = 22 Top = 16 - Width = 78 + Width = 91 Caption = 'CheckBox1' TabOrder = 0 end object CheckBox2: TCheckBox Left = 96 - Height = 19 + Height = 22 Top = 56 - Width = 78 + Width = 91 Caption = 'CheckBox2' Checked = True State = cbChecked @@ -35,7 +35,7 @@ object TestForm: TTestForm end object Edit1: TEdit Left = 96 - Height = 23 + Height = 25 Top = 96 Width = 121 TabOrder = 3 @@ -47,7 +47,9 @@ object TestForm: TTestForm Top = 48 Width = 249 ItemHeight = 0 + ScrollWidth = 247 TabOrder = 4 + TopIndex = -1 end object btnAdd: TButton Left = 104 diff --git a/PythonForDelphi/Demos/FPC/Demo31/Unit2.pas b/PythonForDelphi/Demos/FPC/Demo31/Unit2.pas index 197f5e9a..b9928255 100644 --- a/PythonForDelphi/Demos/FPC/Demo31/Unit2.pas +++ b/PythonForDelphi/Demos/FPC/Demo31/Unit2.pas @@ -5,7 +5,7 @@ interface uses - Windows, Messages, SysUtils, + SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; From 22caab86379c2193017e3dc6965716343b480f75 Mon Sep 17 00:00:00 2001 From: Chris Date: Tue, 6 Oct 2015 12:16:34 +0200 Subject: [PATCH 02/25] support for Python 3.4 --- .../Components/Sources/Core/Definition.Inc | 29 ++++++++++--------- .../Components/Sources/Core/PythonEngine.pas | 13 ++++++--- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/Definition.Inc b/PythonForDelphi/Components/Sources/Core/Definition.Inc index 11515028..af7364be 100644 --- a/PythonForDelphi/Components/Sources/Core/Definition.Inc +++ b/PythonForDelphi/Components/Sources/Core/Definition.Inc @@ -36,6 +36,7 @@ //{$DEFINE PYTHON32} //{$DEFINE PYTHON33} //{$DEFINE PYTHON34} +//{$DEFINE PYTHON35} ///////////////////////////////////////////////////////////////////////////// // Python for Delphi settings. Comment out the setting you want to enable. @@ -322,19 +323,21 @@ // Note that the installer will let the user specify its default Python version, and // thus will edit this file. -{$IFNDEF PYTHON34} - {$IFNDEF PYTHON33} - {$IFNDEF PYTHON32} - {$IFNDEF PYTHON31} - {$IFNDEF PYTHON30} - {$IFNDEF PYTHON27} - {$IFNDEF PYTHON26} - {$IFNDEF PYTHON25} - {$IFNDEF PYTHON24} - {$IFNDEF PYTHON23} - {------} - {$DEFINE PYTHON27} - {------} +{$IFNDEF PYTHON35} + {$IFNDEF PYTHON34} + {$IFNDEF PYTHON33} + {$IFNDEF PYTHON32} + {$IFNDEF PYTHON31} + {$IFNDEF PYTHON30} + {$IFNDEF PYTHON27} + {$IFNDEF PYTHON26} + {$IFNDEF PYTHON25} + {$IFNDEF PYTHON24} + {$IFNDEF PYTHON23} + {------} + {$DEFINE PYTHON27} + {------} + {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index e1343cd6..375a0419 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -126,7 +126,7 @@ interface end; const {$IFDEF MSWINDOWS} - PYTHON_KNOWN_VERSIONS: array[1..10] of TPythonVersionProp = + PYTHON_KNOWN_VERSIONS: array[1..11] of TPythonVersionProp = ( (DllName: 'python23.dll'; RegVersion: '2.3'; APIVersion: 1012; CanUseLatest: True), (DllName: 'python24.dll'; RegVersion: '2.4'; APIVersion: 1012; CanUseLatest: True), (DllName: 'python25.dll'; RegVersion: '2.5'; APIVersion: 1013; CanUseLatest: True), @@ -136,10 +136,11 @@ interface (DllName: 'python31.dll'; RegVersion: '3.1'; APIVersion: 1013; CanUseLatest: True), (DllName: 'python32.dll'; RegVersion: '3.2'; APIVersion: 1013; CanUseLatest: True), (DllName: 'python33.dll'; RegVersion: '3.3'; APIVersion: 1013; CanUseLatest: True), - (DllName: 'python34.dll'; RegVersion: '3.4'; APIVersion: 1013; CanUseLatest: True) ); + (DllName: 'python34.dll'; RegVersion: '3.4'; APIVersion: 1013; CanUseLatest: True), + (DllName: 'python35.dll'; RegVersion: '3.5'; APIVersion: 1013; CanUseLatest: True) ); {$ENDIF} {$IFDEF LINUX} - PYTHON_KNOWN_VERSIONS: array[1..10] of TPythonVersionProp = + PYTHON_KNOWN_VERSIONS: array[1..11] of TPythonVersionProp = ( (DllName: 'libpython2.3.so'; RegVersion: '2.3'; APIVersion: 1012; CanUseLatest: True), (DllName: 'libpython2.4.so'; RegVersion: '2.4'; APIVersion: 1012; CanUseLatest: True), (DllName: 'libpython2.5.so'; RegVersion: '2.5'; APIVersion: 1013; CanUseLatest: True), @@ -149,7 +150,8 @@ interface (DllName: 'libpython3.1.so'; RegVersion: '3.1'; APIVersion: 1013; CanUseLatest: True), (DllName: 'libpython3.2.so'; RegVersion: '3.2'; APIVersion: 1013; CanUseLatest: True), (DllName: 'libpython3.3.so'; RegVersion: '3.3'; APIVersion: 1013; CanUseLatest: True), - (DllName: 'libpython3.4.so'; RegVersion: '3.4'; APIVersion: 1013; CanUseLatest: True) ); + (DllName: 'libpython3.4.so'; RegVersion: '3.4'; APIVersion: 1013; CanUseLatest: True), + (DllName: 'libpython3.5.so'; RegVersion: '3.5'; APIVersion: 1013; CanUseLatest: True) ); {$ENDIF} {$IFDEF PYTHON23} COMPILED_FOR_PYTHON_VERSION_INDEX = 1; @@ -180,6 +182,9 @@ interface {$ENDIF} {$IFDEF PYTHON34} COMPILED_FOR_PYTHON_VERSION_INDEX = 10; +{$ENDIF} +{$IFDEF PYTHON35} + COMPILED_FOR_PYTHON_VERSION_INDEX = 11; {$ENDIF} PYT_METHOD_BUFFER_INCREASE = 10; PYT_MEMBER_BUFFER_INCREASE = 10; From b91a188197cf08e6b8749697727d1c4b681e4d51 Mon Sep 17 00:00:00 2001 From: Chris Date: Tue, 6 Oct 2015 13:05:22 +0200 Subject: [PATCH 03/25] Catch exceptions during DLL load (Loading an Python 3.5 on Windows XP dosend finds Procedure Entry Points in other dlls) --- .../Components/Sources/Core/PythonEngine.pas | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index 375a0419..3086ef09 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -126,7 +126,7 @@ interface end; const {$IFDEF MSWINDOWS} - PYTHON_KNOWN_VERSIONS: array[1..11] of TPythonVersionProp = + PYTHON_KNOWN_VERSIONS: array[1..12] of TPythonVersionProp = ( (DllName: 'python23.dll'; RegVersion: '2.3'; APIVersion: 1012; CanUseLatest: True), (DllName: 'python24.dll'; RegVersion: '2.4'; APIVersion: 1012; CanUseLatest: True), (DllName: 'python25.dll'; RegVersion: '2.5'; APIVersion: 1013; CanUseLatest: True), @@ -137,7 +137,8 @@ interface (DllName: 'python32.dll'; RegVersion: '3.2'; APIVersion: 1013; CanUseLatest: True), (DllName: 'python33.dll'; RegVersion: '3.3'; APIVersion: 1013; CanUseLatest: True), (DllName: 'python34.dll'; RegVersion: '3.4'; APIVersion: 1013; CanUseLatest: True), - (DllName: 'python35.dll'; RegVersion: '3.5'; APIVersion: 1013; CanUseLatest: True) ); + (DllName: 'python35.dll'; RegVersion: '3.5-32'; APIVersion: 1013; CanUseLatest: True), + (DllName: 'python35.dll'; RegVersion: '3.5-64'; APIVersion: 1013; CanUseLatest: True) ); {$ENDIF} {$IFDEF LINUX} PYTHON_KNOWN_VERSIONS: array[1..11] of TPythonVersionProp = @@ -4669,7 +4670,11 @@ procedure TPythonEngine.DoOpenDll(const aDllName : String); for i:= Integer(COMPILED_FOR_PYTHON_VERSION_INDEX) to High(PYTHON_KNOWN_VERSIONS) do begin RegVersion := PYTHON_KNOWN_VERSIONS[i].RegVersion; - FDLLHandle := SafeLoadLibrary(GetDllPath+PYTHON_KNOWN_VERSIONS[i].DllName); + try + FDLLHandle := SafeLoadLibrary(GetDllPath+PYTHON_KNOWN_VERSIONS[i].DllName); + except + FDLLHandle:=0; + end; if IsHandleValid then begin DllName := PYTHON_KNOWN_VERSIONS[i].DllName; From c4cb2a9fc7521bcfb1475430d9f1a0b4d263979d Mon Sep 17 00:00:00 2001 From: Christian U Date: Tue, 6 Oct 2015 17:33:07 +0200 Subject: [PATCH 04/25] fix Version handling in Linux --- .../Components/Sources/Core/PythonEngine.pas | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index e1343cd6..fce5aa13 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -3296,6 +3296,28 @@ procedure TDynamicDll.DoOpenDll(const aDllName : String); GetDllPath+DllName {$ENDIF} ); + {$IFDEF LINUX} + if FDLLHandle=0 then + begin + FDLLHandle := LoadLibrary( + {$IFDEF FPC} + PAnsiChar(AnsiString('/usr/lib/x86_64-linux-gnu/'+DllName)) + {$ELSE} + GetDllPath+DllName + {$ENDIF} + ); + end; + if FDLLHandle=0 then + begin + FDLLHandle := LoadLibrary( + {$IFDEF FPC} + PAnsiChar(AnsiString('/usr/lib/i386-linux-gnu/'+DllName)) + {$ELSE} + GetDllPath+DllName + {$ENDIF} + ); + end; + {$ENDIF} end; end; @@ -3496,8 +3518,13 @@ procedure TPythonInterface.AfterLoad; begin inherited; FIsPython3000 := Pos('PYTHON3', UpperCase(DLLName)) = 1; - FMajorVersion := StrToInt(DLLName[7 {$IFDEF LINUX}+3{$ENDIF}]); + {$IFDEF WINDOWS} + FMajorVersion := StrToInt(DLLName[7{$IFDEF LINUX}+3{$ENDIF}]); FMinorVersion := StrToInt(DLLName[8{$IFDEF LINUX}+3{$ENDIF}]); + {$ELSE} + FMajorVersion := StrToInt(DLLName[7{$IFDEF LINUX}+3{$ENDIF}]); + FMinorVersion := StrToInt(DLLName[9{$IFDEF LINUX}+3{$ENDIF}]); + {$ENDIF} if FIsPython3000 then @@ -3544,6 +3571,8 @@ function TPythonInterface.GetUnicodeTypeSuffix : String; begin if (fMajorVersion > 3) or ((fMajorVersion = 3) and (fMinorVersion >= 3)) then Result := '' + else if ((fMajorVersion = 2) and (fMinorVersion >= 7)) then + Result := '' else if APIVersion >= 1011 then Result := 'UCS2' else From 7a0fecc375841eb5d12810348653d12d05fa5efa Mon Sep 17 00:00:00 2001 From: Christian U Date: Wed, 7 Oct 2015 05:22:47 +0200 Subject: [PATCH 05/25] Remove Widestring Functions in Linux (dont exists in library) --- PythonForDelphi/Components/Sources/Core/PythonEngine.pas | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index 1745f607..ccc7dfce 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -3996,11 +3996,13 @@ procedure TPythonInterface.MapDll; PyType_GenericAlloc :=Import('PyType_GenericAlloc'); PyType_GenericNew :=Import('PyType_GenericNew'); PyType_Ready :=Import('PyType_Ready'); + {$IFNDEF LINUX} PyUnicode_FromWideChar :=Import(AnsiString(Format('PyUnicode%s_FromWideChar',[GetUnicodeTypeSuffix]))); PyUnicode_AsWideChar :=Import(AnsiString(Format('PyUnicode%s_AsWideChar',[GetUnicodeTypeSuffix]))); PyUnicode_Decode :=Import(AnsiString(Format('PyUnicode%s_Decode',[GetUnicodeTypeSuffix]))); PyUnicode_AsEncodedString :=Import(AnsiString(Format('PyUnicode%s_AsEncodedString',[GetUnicodeTypeSuffix]))); PyUnicode_FromOrdinal :=Import(AnsiString(Format('PyUnicode%s_FromOrdinal',[GetUnicodeTypeSuffix]))); + {$ENDIF} PyWeakref_GetObject :=Import('PyWeakref_GetObject'); PyWeakref_NewProxy :=Import('PyWeakref_NewProxy'); PyWeakref_NewRef :=Import('PyWeakref_NewRef'); From d1e93601ea80293693ee580c48097effba1f95db Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 8 Oct 2015 07:18:48 +0200 Subject: [PATCH 06/25] In Windows use UCS2 was correct only in Linux binarys Widestring support is missing --- PythonForDelphi/Components/Sources/Core/PythonEngine.pas | 2 -- 1 file changed, 2 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index ccc7dfce..b0f4f363 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -3577,8 +3577,6 @@ function TPythonInterface.GetUnicodeTypeSuffix : String; begin if (fMajorVersion > 3) or ((fMajorVersion = 3) and (fMinorVersion >= 3)) then Result := '' - else if ((fMajorVersion = 2) and (fMinorVersion >= 7)) then - Result := '' else if APIVersion >= 1011 then Result := 'UCS2' else From 71d3323849806cb0e01c7c1d61cff7221212878d Mon Sep 17 00:00:00 2001 From: Christian U Date: Sun, 25 Oct 2015 21:09:51 +0100 Subject: [PATCH 07/25] support arm cpus --- .../Components/Sources/Core/PythonEngine.pas | 2 + PythonForDelphi/Demos/FPC/Demo01/fpc-res.or | Bin 138668 -> 0 bytes PythonForDelphi/Demos/FPC/Demo25/fpc-res.or | Bin 138668 -> 0 bytes PythonForDelphi/Demos/FPC/Demo31/Project1.lpi | 180 ++++++++++++------ 4 files changed, 129 insertions(+), 53 deletions(-) delete mode 100644 PythonForDelphi/Demos/FPC/Demo01/fpc-res.or delete mode 100644 PythonForDelphi/Demos/FPC/Demo25/fpc-res.or diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index b0f4f363..63db577c 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -9696,6 +9696,7 @@ function PyType_HasFeature(AType : PPyTypeObject; AFlag : Integer) : Boolean; procedure MaskFPUExceptions(ExceptionsMasked : boolean; MatchPythonPrecision : Boolean); begin + {$IFNDEF CPUARM} if MatchPythonPrecision then begin if ExceptionsMasked then Set8087CW($1232 or $3F) @@ -9707,6 +9708,7 @@ procedure MaskFPUExceptions(ExceptionsMasked : boolean; else Set8087CW($1332); end; + {$ENDIF} end; {$IFDEF MSWINDOWS} diff --git a/PythonForDelphi/Demos/FPC/Demo01/fpc-res.or b/PythonForDelphi/Demos/FPC/Demo01/fpc-res.or deleted file mode 100644 index 17d61c85a7cc9a19bb50e16979a5afea0f1ef08b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138668 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

wUZ$>ikC-e~o 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 WJ9DY6t5x8WM+YH%8lO=Ulm7$fT39>) diff --git a/PythonForDelphi/Demos/FPC/Demo31/Project1.lpi b/PythonForDelphi/Demos/FPC/Demo31/Project1.lpi index 9645cf5e..890ee820 100644 --- a/PythonForDelphi/Demos/FPC/Demo31/Project1.lpi +++ b/PythonForDelphi/Demos/FPC/Demo31/Project1.lpi @@ -40,13 +40,13 @@ - + - + - + @@ -57,8 +57,9 @@ + - + @@ -69,17 +70,13 @@ - - + - - - + - @@ -95,7 +92,6 @@ - @@ -105,10 +101,10 @@ - - + + - + @@ -136,19 +132,19 @@ - + - + - + - + @@ -162,10 +158,10 @@ - + - + @@ -186,10 +182,10 @@ - + - + @@ -241,70 +237,148 @@ - - - + + + + + + + + + + + + + + + + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From bce18fee766f91ec8c91d0355a75d79a8a1bc00b Mon Sep 17 00:00:00 2001 From: Christian U Date: Tue, 17 Nov 2015 17:38:04 +0100 Subject: [PATCH 08/25] Fix Callbacks in Linux64 --- .../Sources/Core/MethodCallBack.pas | 4 +- PythonForDelphi/Demos/FPC/Demo06/Project1.lpi | 124 +++++++++--------- PythonForDelphi/Demos/FPC/Demo06/Project1.lpr | 2 +- PythonForDelphi/Demos/FPC/Demo06/Unit1.lfm | 4 +- PythonForDelphi/Demos/FPC/Demo06/Unit1.pas | 4 +- 5 files changed, 66 insertions(+), 72 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/MethodCallBack.pas b/PythonForDelphi/Components/Sources/Core/MethodCallBack.pas index 845252de..50801ed9 100644 --- a/PythonForDelphi/Components/Sources/Core/MethodCallBack.pas +++ b/PythonForDelphi/Components/Sources/Core/MethodCallBack.pas @@ -179,8 +179,8 @@ procedure GetCodeMem(var ptr: PByte; size: integer); {$IFDEF MSWINDOWS} page:=VirtualAlloc(nil, PageSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE); {$ELSE} - //page := GetMem(PageSize); - page := mmap(Pointer($10000000), PageSize, PROT_NONE, MAP_PRIVATE or MAP_ANON, -1, 0); + page := GetMem(PageSize); + //page := mmap(Pointer($10000000), PageSize, PROT_NONE, MAP_PRIVATE or MAP_ANON, -1, 0); mprotect(page, PageSize, PROT_READ or PROT_WRITE or PROT_EXEC); {$ENDIF} page^.next:=CodeMemPages; diff --git a/PythonForDelphi/Demos/FPC/Demo06/Project1.lpi b/PythonForDelphi/Demos/FPC/Demo06/Project1.lpi index 4b4bfea4..f740b927 100644 --- a/PythonForDelphi/Demos/FPC/Demo06/Project1.lpi +++ b/PythonForDelphi/Demos/FPC/Demo06/Project1.lpi @@ -1,4 +1,4 @@ - + @@ -7,7 +7,6 @@ - @@ -26,7 +25,7 @@ - + @@ -38,14 +37,11 @@ - + - - - - + @@ -56,11 +52,8 @@ - - - - + @@ -68,17 +61,12 @@ - - - - - - + @@ -87,142 +75,147 @@ - + + + + + + + + + + + - - - + + - + - + - - + - + - + - + - + - + - - + - + - + - + - + - + - + - - + - + - + - + - + - + - + - + - + - - + - - + + - - + + - - + + - + @@ -239,14 +232,17 @@ - - - - - - + + + + + + + + + diff --git a/PythonForDelphi/Demos/FPC/Demo06/Project1.lpr b/PythonForDelphi/Demos/FPC/Demo06/Project1.lpr index b2943a89..0d555335 100644 --- a/PythonForDelphi/Demos/FPC/Demo06/Project1.lpr +++ b/PythonForDelphi/Demos/FPC/Demo06/Project1.lpr @@ -7,7 +7,7 @@ Forms, Interfaces, {$ENDIF} {$IFDEF LINUX} - QForms, + Forms, Interfaces, {$ENDIF} Unit1 in 'Unit1.pas' {Form1}; diff --git a/PythonForDelphi/Demos/FPC/Demo06/Unit1.lfm b/PythonForDelphi/Demos/FPC/Demo06/Unit1.lfm index 94a42c35..314e7128 100644 --- a/PythonForDelphi/Demos/FPC/Demo06/Unit1.lfm +++ b/PythonForDelphi/Demos/FPC/Demo06/Unit1.lfm @@ -10,7 +10,7 @@ object Form1: TForm1 Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' - LCLVersion = '0.9.30.2' + LCLVersion = '1.5' object Splitter1: TSplitter Cursor = crVSplit Left = 0 @@ -91,7 +91,7 @@ object Form1: TForm1 end object Edit1: TEdit Left = 368 - Height = 21 + Height = 24 Top = 32 Width = 161 TabOrder = 4 diff --git a/PythonForDelphi/Demos/FPC/Demo06/Unit1.pas b/PythonForDelphi/Demos/FPC/Demo06/Unit1.pas index 76f79034..10f17178 100644 --- a/PythonForDelphi/Demos/FPC/Demo06/Unit1.pas +++ b/PythonForDelphi/Demos/FPC/Demo06/Unit1.pas @@ -1,7 +1,5 @@ unit Unit1; -{$I Definition.Inc} - interface uses @@ -11,7 +9,7 @@ interface StdCtrls, ComCtrls, ExtCtrls, {$ENDIF} {$IFDEF LINUX} - QForms, QDialogs, QStdCtrls, QControls, QExtCtrls, + Forms, Dialogs, StdCtrls, Controls, ExtCtrls, {$ENDIF} PythonEngine, PythonGUIInputOutput; From e175f1bf43d71e4c2042c2ce06493d91b7f1b118 Mon Sep 17 00:00:00 2001 From: Christian U Date: Tue, 17 Nov 2015 19:48:15 +0100 Subject: [PATCH 09/25] Final fixes MethodCallback on Linux --- .../Sources/Core/MethodCallBack.pas | 27 +++---- PythonForDelphi/Demos/FPC/Demo06/Project1.lpi | 76 +++++++++---------- 2 files changed, 45 insertions(+), 58 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/MethodCallBack.pas b/PythonForDelphi/Components/Sources/Core/MethodCallBack.pas index 50801ed9..d868d76e 100644 --- a/PythonForDelphi/Components/Sources/Core/MethodCallBack.pas +++ b/PythonForDelphi/Components/Sources/Core/MethodCallBack.pas @@ -102,6 +102,7 @@ implementation Windows, {$ELSE WINDOWS} {$IFDEF FPC} + BaseUnix, {$ELSE} Posix.SysMMan, {$ENDIF} @@ -143,19 +144,13 @@ implementation {$IFNDEF MSWINDOWS} {$IFDEF FPC} -function mmap(Addr: Pointer; Len: Integer; Prot: Integer; Flags: Integer; FileDes: Integer; Off: Integer): Pointer; cdecl; - external 'c' name 'mmap'; - function mprotect(Addr: Pointer; Len: Integer; Prot: Integer): Integer; cdecl; external 'c' name 'mprotect'; - -function munmap(Addr: Pointer; Len: Integer): Integer; cdecl; - external 'c' name 'munmap'; -const - PROT_NONE =0; - PROT_READ =1; - PROT_WRITE =2; - PROT_EXEC =4; +const +// PROT_NONE =0; +// PROT_READ =1; +// PROT_WRITE =2; +// PROT_EXEC =4; MAP_PRIVATE =2; MAP_ANON=$1000; {$ENDIF} @@ -180,7 +175,7 @@ procedure GetCodeMem(var ptr: PByte; size: integer); page:=VirtualAlloc(nil, PageSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE); {$ELSE} page := GetMem(PageSize); - //page := mmap(Pointer($10000000), PageSize, PROT_NONE, MAP_PRIVATE or MAP_ANON, -1, 0); + //page := fpmmap(nil, PageSize, PROT_NONE, MAP_ANONYMOUS, -1, 0); mprotect(page, PageSize, PROT_READ or PROT_WRITE or PROT_EXEC); {$ENDIF} page^.next:=CodeMemPages; @@ -238,8 +233,8 @@ procedure FreeCodeMem(ptr: Pointer); {$IFDEF MSWINDOWS} VirtualFree(page, 0, MEM_RELEASE); {$ELSE} - // FreeMem(page); - munmap(page,PageSize); + FreeMem(page); + //fpmunmap(page,PageSize); {$ENDIF} end; @@ -601,8 +596,8 @@ procedure FreeCallBacks; {$IFDEF MSWINDOWS} VirtualFree(page, 0, MEM_RELEASE); {$ELSE} - //FreeMem(page); - munmap(page,PageSize); + FreeMem(page); + //fpmunmap(page,PageSize); {$ENDIF} page := nextpage; diff --git a/PythonForDelphi/Demos/FPC/Demo06/Project1.lpi b/PythonForDelphi/Demos/FPC/Demo06/Project1.lpi index f740b927..ab3c5a27 100644 --- a/PythonForDelphi/Demos/FPC/Demo06/Project1.lpi +++ b/PythonForDelphi/Demos/FPC/Demo06/Project1.lpi @@ -52,8 +52,10 @@ + - + + @@ -86,10 +88,9 @@ - - - + + @@ -98,119 +99,119 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + - + + - + - + - - + + @@ -234,15 +235,6 @@ - - - - - - - - - From 675c30f572fa647edb1161086552435dab7d864d Mon Sep 17 00:00:00 2001 From: Cutec OSX Date: Tue, 8 Dec 2015 05:18:01 +0100 Subject: [PATCH 10/25] fix compiling on OSX --- .../Components/Sources/Core/PythonEngine.pas | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index 63db577c..a72ee085 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -69,8 +69,7 @@ interface uses {$IFDEF MSWINDOWS} Windows, -{$ENDIF} -{$IFDEF LINUX} +{$ELSE} Types, dynlibs, {$ENDIF} @@ -154,6 +153,20 @@ interface (DllName: 'libpython3.4.so'; RegVersion: '3.4'; APIVersion: 1013; CanUseLatest: True), (DllName: 'libpython3.5.so'; RegVersion: '3.5'; APIVersion: 1013; CanUseLatest: True) ); {$ENDIF} +{$IFDEF DARWIN} + PYTHON_KNOWN_VERSIONS: array[1..11] of TPythonVersionProp = + ( (DllName: 'libpython2.3.dylib'; RegVersion: '2.3'; APIVersion: 1012; CanUseLatest: True), + (DllName: 'libpython2.4.dylib'; RegVersion: '2.4'; APIVersion: 1012; CanUseLatest: True), + (DllName: 'libpython2.5.dylib'; RegVersion: '2.5'; APIVersion: 1013; CanUseLatest: True), + (DllName: 'libpython2.6.dylib'; RegVersion: '2.6'; APIVersion: 1013; CanUseLatest: True), + (DllName: 'libpython2.7.dylib'; RegVersion: '2.7'; APIVersion: 1013; CanUseLatest: True), + (DllName: 'libpython3.0.dylib'; RegVersion: '3.0'; APIVersion: 1013; CanUseLatest: True), + (DllName: 'libpython3.1.dylib'; RegVersion: '3.1'; APIVersion: 1013; CanUseLatest: True), + (DllName: 'libpython3.2.dylib'; RegVersion: '3.2'; APIVersion: 1013; CanUseLatest: True), + (DllName: 'libpython3.3.dylib'; RegVersion: '3.3'; APIVersion: 1013; CanUseLatest: True), + (DllName: 'libpython3.4.dylib'; RegVersion: '3.4'; APIVersion: 1013; CanUseLatest: True), + (DllName: 'libpython3.5.dylib'; RegVersion: '3.5'; APIVersion: 1013; CanUseLatest: True) ); +{$ENDIF} {$IFDEF PYTHON23} COMPILED_FOR_PYTHON_VERSION_INDEX = 1; {$ENDIF} @@ -3264,6 +3277,7 @@ function TPythonInputOutput.GetCurrentThreadSlotIdx : Integer; thread_id : Longint; i : Integer; begin + {$ifndef DARWIN} thread_id := GetCurrentThreadId; for i := 0 to FLinesPerThread.Count-1 do if Longint(FLinesPerThread.Objects[i]) = thread_id then @@ -3272,6 +3286,7 @@ function TPythonInputOutput.GetCurrentThreadSlotIdx : Integer; Exit; end; Result := FLinesPerThread.AddObject( '', TObject(thread_id) ); + {$endif} end; function TPythonInputOutput.GetCurrentThreadLine : IOString; @@ -9758,4 +9773,4 @@ function IsPythonVersionRegistered(PythonVersion : string; {$ENDIF} end. - + \ No newline at end of file From 050d64e6ae0f080f71976589f3d27c1984ea15b5 Mon Sep 17 00:00:00 2001 From: "sergey.bugay" Date: Mon, 11 Jan 2016 10:37:43 +0300 Subject: [PATCH 11/25] Resolve hints Resolved hints: * [dcc32 Hint] PythonEngine.pas(5559): H2443 Inline function 'TList.Remove' has not been expanded because unit 'System.Types' is not specified in USES list * [dcc32 Hint] PythonEngine.pas(5561): H2443 Inline function 'TList.Remove' has not been expanded because unit 'System.Types' is not specified in USES list --- PythonForDelphi/Components/Sources/Core/PythonEngine.pas | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index 9900134a..3e5e2a4a 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -3111,9 +3111,11 @@ procedure MaskFPUExceptions(ExceptionsMasked : boolean; implementation +uses {$IFDEF MSWINDOWS} -uses Registry; + Registry, {$ENDIF} + System.Types; (*******************************************************) From 03a9ce835a22d0cd56c718e35473affd23ae7dbc Mon Sep 17 00:00:00 2001 From: "sergey.bugay" Date: Mon, 11 Jan 2016 10:41:04 +0300 Subject: [PATCH 12/25] Change event types --- PythonForDelphi/Components/Sources/Core/PythonEngine.pas | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index 3e5e2a4a..f5459f1b 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -1364,10 +1364,10 @@ EPyWindowsError = class (EPyOSError); kMaxLineLength = 256; type - TSendDataEvent = procedure (Sender: TObject; const Data : AnsiString ) of object; - TReceiveDataEvent = procedure (Sender: TObject; var Data : AnsiString ) of object; - TSendUniDataEvent = procedure (Sender: TObject; const Data : UnicodeString ) of object; - TReceiveUniDataEvent = procedure (Sender: TObject; var Data : UnicodeString ) of object; + TSendDataEvent = reference to procedure (Sender: TObject; const Data : AnsiString ); + TReceiveDataEvent = reference to procedure (Sender: TObject; var Data : AnsiString ); + TSendUniDataEvent = reference to procedure (Sender: TObject; const Data : UnicodeString ); + TReceiveUniDataEvent = reference to procedure (Sender: TObject; var Data : UnicodeString ); IOChar = WideChar; IOString = UnicodeString; TIOStringList = TUnicodeStringList; From 0fe0de3e25d961e1568a129d31c29a959790f795 Mon Sep 17 00:00:00 2001 From: Chris Date: Wed, 20 Jan 2016 14:44:01 +0100 Subject: [PATCH 13/25] fix compiling in fpc 3.0.0 --- .../Components/Sources/Core/Definition.Inc | 1 + .../Components/Sources/Core/VarPyth.pas | 16 ++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/Definition.Inc b/PythonForDelphi/Components/Sources/Core/Definition.Inc index af7364be..5f1f7bc9 100644 --- a/PythonForDelphi/Components/Sources/Core/Definition.Inc +++ b/PythonForDelphi/Components/Sources/Core/Definition.Inc @@ -443,6 +443,7 @@ {$DEFINE MACOS32} {$ENDIF CPU32} {$ENDIF DARWIN} + {$H+} {$ENDIF FPC} diff --git a/PythonForDelphi/Components/Sources/Core/VarPyth.pas b/PythonForDelphi/Components/Sources/Core/VarPyth.pas index d3eb8ce1..1246a8b9 100644 --- a/PythonForDelphi/Components/Sources/Core/VarPyth.pas +++ b/PythonForDelphi/Components/Sources/Core/VarPyth.pas @@ -180,9 +180,9 @@ TPythonVariantType = class(TInvokeableVariantType, IVarInstanceReference) const Arguments: TVarDataArray): Boolean; override; function GetProperty(var Dest: TVarData; const V: TVarData; const AName: string): Boolean; override; - function SetProperty(const V: TVarData; const AName: string; + function SetProperty(var V: TVarData; const AName: string; const Value: TVarData): Boolean; override; - procedure DispInvoke(Dest: PVarData; const Source: TVarData; + procedure DispInvoke(Dest: PVarData; var Source: TVarData; CallDesc: PCallDesc; Params: Pointer); override; end; @@ -877,8 +877,8 @@ procedure TPythonVariantType.Clear(var V: TVarData); FreeAndNil(TPythonVarData(V).VPython); end; -function TPythonVariantType.CompareOp(const Left, Right: TVarData; - const AOperator: TVarOp): Boolean; +function TPythonVariantType.CompareOp(const Left: TVarData; + const Right: TVarData; const AOperator: TVarOp): Boolean; begin Result := False; if (Left.VType = VarType) and (Right.VType = VarType) then @@ -932,8 +932,8 @@ procedure SetClearVarToEmptyParam(var V: TVarData); CPropertySet = $04; {$IFDEF USESYSTEMDISPINVOKE} -procedure TPythonVariantType.DispInvoke(Dest: PVarData; - const Source: TVarData; CallDesc: PCallDesc; Params: Pointer); +procedure TPythonVariantType.DispInvoke(Dest: PVarData; var Source: TVarData; + CallDesc: PCallDesc; Params: Pointer); {$IFDEF DELPHIXE2} // Modified to correct memory leak QC102387 procedure PatchedDispInvoke(Dest: PVarData; @@ -1855,8 +1855,8 @@ function TPythonVariantType.RightPromotion(const V: TVarData; Result := False; end; -function TPythonVariantType.SetProperty(const V: TVarData; - const AName: string; const Value: TVarData): Boolean; +function TPythonVariantType.SetProperty(var V: TVarData; const AName: string; + const Value: TVarData): Boolean; var _newValue : PPyObject; begin From a7a2dd6affdc714312804c429f2cd9e2afe1fb7e Mon Sep 17 00:00:00 2001 From: Christian U Date: Wed, 20 Jan 2016 16:55:15 +0100 Subject: [PATCH 14/25] fix compiling with fpc < 3.0.0 --- .../Components/Sources/Core/PythonEngine.pas | 15 ++++++------- .../Components/Sources/Core/VarPyth.pas | 22 +++++++++++++++++++ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index 88bd0409..8dde7779 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -1383,10 +1383,10 @@ EPyWindowsError = class (EPyOSError); kMaxLineLength = 256; type - TSendDataEvent = reference to procedure (Sender: TObject; const Data : AnsiString ); - TReceiveDataEvent = reference to procedure (Sender: TObject; var Data : AnsiString ); - TSendUniDataEvent = reference to procedure (Sender: TObject; const Data : UnicodeString ); - TReceiveUniDataEvent = reference to procedure (Sender: TObject; var Data : UnicodeString ); + TSendDataEvent = procedure (Sender: TObject; const Data : AnsiString ) of object; + TReceiveDataEvent = procedure (Sender: TObject; var Data : AnsiString ) of object; + TSendUniDataEvent = procedure (Sender: TObject; const Data : UnicodeString ) of object; + TReceiveUniDataEvent = procedure (Sender: TObject; var Data : UnicodeString ) of object; IOChar = WideChar; IOString = UnicodeString; TIOStringList = TUnicodeStringList; @@ -3130,11 +3130,10 @@ procedure MaskFPUExceptions(ExceptionsMasked : boolean; implementation -uses {$IFDEF MSWINDOWS} - Registry, +uses + Registry; {$ENDIF} - System.Types; (*******************************************************) @@ -9775,4 +9774,4 @@ function IsPythonVersionRegistered(PythonVersion : string; {$ENDIF} end. - \ No newline at end of file + diff --git a/PythonForDelphi/Components/Sources/Core/VarPyth.pas b/PythonForDelphi/Components/Sources/Core/VarPyth.pas index 1246a8b9..46fdc952 100644 --- a/PythonForDelphi/Components/Sources/Core/VarPyth.pas +++ b/PythonForDelphi/Components/Sources/Core/VarPyth.pas @@ -180,10 +180,17 @@ TPythonVariantType = class(TInvokeableVariantType, IVarInstanceReference) const Arguments: TVarDataArray): Boolean; override; function GetProperty(var Dest: TVarData; const V: TVarData; const AName: string): Boolean; override; + {$if FPC_VERSION>=3} function SetProperty(var V: TVarData; const AName: string; const Value: TVarData): Boolean; override; procedure DispInvoke(Dest: PVarData; var Source: TVarData; CallDesc: PCallDesc; Params: Pointer); override; + {$else} + function SetProperty(const V: TVarData; const AName: string; + const Value: TVarData): Boolean; override; + procedure DispInvoke(Dest: PVarData; const Source: TVarData; + CallDesc: PCallDesc; Params: Pointer); override; + {$endif} end; var @@ -932,8 +939,13 @@ procedure SetClearVarToEmptyParam(var V: TVarData); CPropertySet = $04; {$IFDEF USESYSTEMDISPINVOKE} +{$if FPC_VERSION>=3} procedure TPythonVariantType.DispInvoke(Dest: PVarData; var Source: TVarData; CallDesc: PCallDesc; Params: Pointer); +{$else} +procedure TPythonVariantType.DispInvoke(Dest: PVarData; const Source: TVarData; + CallDesc: PCallDesc; Params: Pointer); +{$endif} {$IFDEF DELPHIXE2} // Modified to correct memory leak QC102387 procedure PatchedDispInvoke(Dest: PVarData; @@ -1073,8 +1085,13 @@ TStringDesc = record end; {$ELSE USESYSTEMDISPINVOKE} +{$if FPC_VERSION>=3} procedure TPythonVariantType.DispInvoke(Dest: PVarData; const Source: TVarData; CallDesc: PCallDesc; Params: Pointer); +{$else} +procedure TPythonVariantType.DispInvoke(Dest: PVarData; + var Source: TVarData; CallDesc: PCallDesc; Params: Pointer); +{$endif} begin DoDispInvoke(Dest, Source, CallDesc, Params); end; @@ -1855,8 +1872,13 @@ function TPythonVariantType.RightPromotion(const V: TVarData; Result := False; end; +{$if FPC_VERSION>=3} function TPythonVariantType.SetProperty(var V: TVarData; const AName: string; const Value: TVarData): Boolean; +{$else} +function TPythonVariantType.SetProperty(const V: TVarData; const AName: string; + const Value: TVarData): Boolean; +{$endif} var _newValue : PPyObject; begin From 09ca35519812548535489f065c9c2fc4097ab296 Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 11 Feb 2016 14:39:15 +0100 Subject: [PATCH 15/25] Add FPC Only Package --- PythonForDelphi/Components/P4DFpc.lpk | 66 +++++++++++++++++++++++++++ PythonForDelphi/Components/P4DFpc.pas | 22 +++++++++ PythonForDelphi/Components/p4dlaz.lpk | 11 ++--- 3 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 PythonForDelphi/Components/P4DFpc.lpk create mode 100644 PythonForDelphi/Components/P4DFpc.pas diff --git a/PythonForDelphi/Components/P4DFpc.lpk b/PythonForDelphi/Components/P4DFpc.lpk new file mode 100644 index 00000000..688c17ef --- /dev/null +++ b/PythonForDelphi/Components/P4DFpc.lpk @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ExternHelp Items="Count"/> + + + diff --git a/PythonForDelphi/Components/P4DFpc.pas b/PythonForDelphi/Components/P4DFpc.pas new file mode 100644 index 00000000..c82e424b --- /dev/null +++ b/PythonForDelphi/Components/P4DFpc.pas @@ -0,0 +1,22 @@ +{ This file was automatically created by Lazarus. Do not edit! + This source is only used to compile and install the package. + } + +unit P4DFpc; + +interface + +uses + PythonEngine, MethodCallBack, TinyWideStrings, VarPyth, WrapDelphiClasses, + WrapDelphiTypes, LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('PythonEngine', @PythonEngine.Register); +end; + +initialization + RegisterPackage('P4DFpc', @Register); +end. diff --git a/PythonForDelphi/Components/p4dlaz.lpk b/PythonForDelphi/Components/p4dlaz.lpk index afdb8f03..9c80ff72 100644 --- a/PythonForDelphi/Components/p4dlaz.lpk +++ b/PythonForDelphi/Components/p4dlaz.lpk @@ -64,15 +64,11 @@ - + - - - - - + @@ -81,5 +77,8 @@ + + <_ExternHelp Items="Count"/> + From f525576b24c1660c889de4639f840b5d93e9f9db Mon Sep 17 00:00:00 2001 From: Christian U Date: Mon, 21 Mar 2016 20:46:28 +0100 Subject: [PATCH 16/25] fix compiling --- .../Components/Sources/Core/PythonGUIInputOutput.pas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PythonForDelphi/Components/Sources/Core/PythonGUIInputOutput.pas b/PythonForDelphi/Components/Sources/Core/PythonGUIInputOutput.pas index 018f2cf8..7c7a1f54 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonGUIInputOutput.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonGUIInputOutput.pas @@ -49,7 +49,7 @@ interface {$IFDEF MSWINDOWS} Windows, Messages, {$ENDIF} - SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + SysUtils, Classes;//, Graphics, Controls, Forms, Dialogs, StdCtrls, PythonEngine; {$IFDEF MSWINDOWS} From 357834105b7a8aaec854a848a3bfd3f4b7072d4e Mon Sep 17 00:00:00 2001 From: Christian Ulrich Date: Wed, 14 Sep 2016 22:46:42 +0200 Subject: [PATCH 17/25] Fix compiling in old Lazarus (0.9.3x) --- PythonForDelphi/Components/P4DFpc.lpk | 11 ++++++----- PythonForDelphi/Components/P4DFpc.pas | 13 +++---------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/PythonForDelphi/Components/P4DFpc.lpk b/PythonForDelphi/Components/P4DFpc.lpk index 688c17ef..63a050ce 100644 --- a/PythonForDelphi/Components/P4DFpc.lpk +++ b/PythonForDelphi/Components/P4DFpc.lpk @@ -1,11 +1,10 @@ - + - + - - + @@ -18,11 +17,13 @@ + + + - diff --git a/PythonForDelphi/Components/P4DFpc.pas b/PythonForDelphi/Components/P4DFpc.pas index c82e424b..e1a1c690 100644 --- a/PythonForDelphi/Components/P4DFpc.pas +++ b/PythonForDelphi/Components/P4DFpc.pas @@ -2,21 +2,14 @@ This source is only used to compile and install the package. } -unit P4DFpc; +unit P4DFpc; interface uses - PythonEngine, MethodCallBack, TinyWideStrings, VarPyth, WrapDelphiClasses, - WrapDelphiTypes, LazarusPackageIntf; + PythonEngine, MethodCallBack, TinyWideStrings, VarPyth, WrapDelphiClasses, + WrapDelphiTypes; implementation -procedure Register; -begin - RegisterUnit('PythonEngine', @PythonEngine.Register); -end; - -initialization - RegisterPackage('P4DFpc', @Register); end. From 5f043aa4b6645c317605287e533862ff66afda12 Mon Sep 17 00:00:00 2001 From: Christian U Date: Fri, 13 Oct 2017 11:05:22 +0200 Subject: [PATCH 18/25] Fixed compiling for Lazarus Package --- .../Components/Sources/Core/PythonGUIInputOutput.pas | 2 +- PythonForDelphi/Components/p4dlaz.lpk | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/PythonGUIInputOutput.pas b/PythonForDelphi/Components/Sources/Core/PythonGUIInputOutput.pas index 7c7a1f54..018f2cf8 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonGUIInputOutput.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonGUIInputOutput.pas @@ -49,7 +49,7 @@ interface {$IFDEF MSWINDOWS} Windows, Messages, {$ENDIF} - SysUtils, Classes;//, Graphics, Controls, Forms, Dialogs, + SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, PythonEngine; {$IFDEF MSWINDOWS} diff --git a/PythonForDelphi/Components/p4dlaz.lpk b/PythonForDelphi/Components/p4dlaz.lpk index 9c80ff72..e210b8a5 100644 --- a/PythonForDelphi/Components/p4dlaz.lpk +++ b/PythonForDelphi/Components/p4dlaz.lpk @@ -64,11 +64,14 @@ - + + + + - + From 98d357693d9302eff8949d8e01c33709d5629304 Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 1 Feb 2018 12:48:35 +0100 Subject: [PATCH 19/25] Fix compiling with older fpc Versions --- .../Components/Sources/Core/VarPyth.pas | 15 ++++++++++----- .../Components/Sources/Core/WrapDelphi.pas | 8 ++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/VarPyth.pas b/PythonForDelphi/Components/Sources/Core/VarPyth.pas index 38458e11..2f594d99 100644 --- a/PythonForDelphi/Components/Sources/Core/VarPyth.pas +++ b/PythonForDelphi/Components/Sources/Core/VarPyth.pas @@ -41,6 +41,8 @@ interface +{$H+} + uses Variants, PythonEngine; @@ -180,14 +182,14 @@ TPythonVariantType = class(TInvokeableVariantType, IVarInstanceReference) const Arguments: TVarDataArray): Boolean; override; function GetProperty(var Dest: TVarData; const V: TVarData; const AName: string): Boolean; override; - function SetProperty({$IFDEF FPC}var{$ELSE}const{$ENDIF} V: TVarData; const AName: string; + function SetProperty({$IF FPC_VERSION > 300}var{$ELSE}const{$ENDIF} V: TVarData; const AName: string; const Value: TVarData): Boolean; override; {$IFDEF DELPHIXE7_OR_HIGHER} procedure DispInvoke(Dest: PVarData; [Ref] const Source: TVarData; CallDesc: PCallDesc; Params: Pointer);override; {$ELSE} procedure DispInvoke(Dest: PVarData; - var Source: TVarData; CallDesc: PCallDesc; Params: Pointer);override; + {$IF FPC_VERSION > 300}var{$ELSE}const{$ENDIF}Source: TVarData; CallDesc: PCallDesc; Params: Pointer);override; {$ENDIF} end; @@ -941,7 +943,7 @@ procedure TPythonVariantType.DispInvoke(Dest: PVarData; [Ref] const Source: TVarData; CallDesc: PCallDesc; Params: Pointer); {$ELSE} procedure TPythonVariantType.DispInvoke(Dest: PVarData; - var Source: TVarData; CallDesc: PCallDesc; Params: Pointer); + {$IF FPC_VERSION > 300}var{$ELSE}const{$ENDIF}Source: TVarData; CallDesc: PCallDesc; Params: Pointer); {$ENDIF} {$IFDEF USESYSTEMDISPINVOKE} {$IFDEF DELPHIXE2_OR_HIGHER} @@ -1083,8 +1085,11 @@ TStringDesc = record end; {$ELSE USESYSTEMDISPINVOKE} +var + aSource: tvardata; begin - DoDispInvoke(Dest, Source, CallDesc, Params); + aSource := Source; + DoDispInvoke(Dest, aSource, CallDesc, Params); end; procedure TPythonVariantType.DoDispInvoke(Dest: PVarData; @@ -1863,7 +1868,7 @@ function TPythonVariantType.RightPromotion(const V: TVarData; Result := False; end; -function TPythonVariantType.SetProperty({$IFDEF FPC}var{$ELSE}const{$ENDIF} V: TVarData; +function TPythonVariantType.SetProperty({$IF FPC_VERSION > 300}var{$ELSE}const{$ENDIF} V: TVarData; const AName: string; const Value: TVarData): Boolean; var _newValue : PPyObject; diff --git a/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas b/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas index 7e074d6a..2342619b 100644 --- a/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas +++ b/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas @@ -1106,12 +1106,20 @@ function PythonToSet(ASet : PPyObject; APropInfo: PPropInfo) : Integer; {$IFDEF FPC} function GetPropValue(Instance: TObject; PropInfo: PPropInfo): Variant; begin + {$IF FPC_VERSION<300} + Result := Variants.GetPropValue(Instance, PropInfo^.Name); + {$ELSE} Result := Variants.GetPropValue(Instance, PropInfo, False); + {$ENDIF} end; procedure SetPropValue(Instance: TObject; PropInfo: PPropInfo; const Value: Variant); begin + {$IF FPC_VERSION<300} + Variants.SetPropValue(Instance, PropInfo^.Name, Value); + {$ELSE} Variants.SetPropValue(Instance, PropInfo, Value); + {$ENDIF} end; {$ENDIF} From 79c6a0c80d5638550c3708bfeff5bc9fd7ce477b Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 1 Feb 2018 12:53:31 +0100 Subject: [PATCH 20/25] Really fix it --- PythonForDelphi/Components/Sources/Core/VarPyth.pas | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/VarPyth.pas b/PythonForDelphi/Components/Sources/Core/VarPyth.pas index 2f594d99..2a41d135 100644 --- a/PythonForDelphi/Components/Sources/Core/VarPyth.pas +++ b/PythonForDelphi/Components/Sources/Core/VarPyth.pas @@ -41,8 +41,6 @@ interface -{$H+} - uses Variants, PythonEngine; @@ -182,14 +180,14 @@ TPythonVariantType = class(TInvokeableVariantType, IVarInstanceReference) const Arguments: TVarDataArray): Boolean; override; function GetProperty(var Dest: TVarData; const V: TVarData; const AName: string): Boolean; override; - function SetProperty({$IF FPC_VERSION > 300}var{$ELSE}const{$ENDIF} V: TVarData; const AName: string; + function SetProperty({$IF FPC_FULLVERSION > 30000}var{$ELSE}const{$ENDIF} V: TVarData; const AName: string; const Value: TVarData): Boolean; override; {$IFDEF DELPHIXE7_OR_HIGHER} procedure DispInvoke(Dest: PVarData; [Ref] const Source: TVarData; CallDesc: PCallDesc; Params: Pointer);override; {$ELSE} procedure DispInvoke(Dest: PVarData; - {$IF FPC_VERSION > 300}var{$ELSE}const{$ENDIF}Source: TVarData; CallDesc: PCallDesc; Params: Pointer);override; + {$IF FPC_FULLVERSION > 30000}var{$ELSE}const{$ENDIF}Source: TVarData; CallDesc: PCallDesc; Params: Pointer);override; {$ENDIF} end; @@ -943,7 +941,7 @@ procedure TPythonVariantType.DispInvoke(Dest: PVarData; [Ref] const Source: TVarData; CallDesc: PCallDesc; Params: Pointer); {$ELSE} procedure TPythonVariantType.DispInvoke(Dest: PVarData; - {$IF FPC_VERSION > 300}var{$ELSE}const{$ENDIF}Source: TVarData; CallDesc: PCallDesc; Params: Pointer); + {$IF FPC_FULLVERSION > 30000}var{$ELSE}const{$ENDIF}Source: TVarData; CallDesc: PCallDesc; Params: Pointer); {$ENDIF} {$IFDEF USESYSTEMDISPINVOKE} {$IFDEF DELPHIXE2_OR_HIGHER} @@ -1868,7 +1866,7 @@ function TPythonVariantType.RightPromotion(const V: TVarData; Result := False; end; -function TPythonVariantType.SetProperty({$IF FPC_VERSION > 300}var{$ELSE}const{$ENDIF} V: TVarData; +function TPythonVariantType.SetProperty({$IF FPC_FULLVERSION > 30000}var{$ELSE}const{$ENDIF} V: TVarData; const AName: string; const Value: TVarData): Boolean; var _newValue : PPyObject; From 2937b562c29fa6b5e81ec8721b8d53e54ad18bb9 Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 1 Feb 2018 13:04:06 +0100 Subject: [PATCH 21/25] Hopefully the last fix for different fpc versions --- PythonForDelphi/Components/Sources/Core/WrapDelphi.pas | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas b/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas index 2342619b..0060fead 100644 --- a/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas +++ b/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas @@ -1106,7 +1106,7 @@ function PythonToSet(ASet : PPyObject; APropInfo: PPropInfo) : Integer; {$IFDEF FPC} function GetPropValue(Instance: TObject; PropInfo: PPropInfo): Variant; begin - {$IF FPC_VERSION<300} + {$IF FPC_FULLVERSION<30000} Result := Variants.GetPropValue(Instance, PropInfo^.Name); {$ELSE} Result := Variants.GetPropValue(Instance, PropInfo, False); @@ -1115,7 +1115,7 @@ function GetPropValue(Instance: TObject; PropInfo: PPropInfo): Variant; procedure SetPropValue(Instance: TObject; PropInfo: PPropInfo; const Value: Variant); begin - {$IF FPC_VERSION<300} + {$IF FPC_FULLVERSION<30000} Variants.SetPropValue(Instance, PropInfo^.Name, Value); {$ELSE} Variants.SetPropValue(Instance, PropInfo, Value); From 2058d1f81de5926c9c9d2179a14f2e51023b5354 Mon Sep 17 00:00:00 2001 From: Christian Ulrich Date: Thu, 1 Feb 2018 21:42:44 +0100 Subject: [PATCH 22/25] Fix compiling with fpc 3.0.0 in linux --- PythonForDelphi/Components/Sources/Core/PythonEngine.pas | 2 +- PythonForDelphi/Components/Sources/Core/VarPyth.pas | 8 ++++---- PythonForDelphi/Components/Sources/Core/WrapDelphi.pas | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index e0c08f2e..7a70a24d 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -159,7 +159,7 @@ interface (DllName: 'libpython3.3.so'; RegVersion: '3.3'; APIVersion: 1013; CanUseLatest: True), (DllName: 'libpython3.4.so'; RegVersion: '3.4'; APIVersion: 1013; CanUseLatest: True), (DllName: 'libpython3.5.so'; RegVersion: '3.5'; APIVersion: 1013; CanUseLatest: True), - (DllName: 'libpython3.6.so'; RegVersion: '3.6'; APIVersion: 1013; CanUseLatest: True) + (DllName: 'libpython3.6.so'; RegVersion: '3.6'; APIVersion: 1013; CanUseLatest: True), (DllName: 'libpython3.7.so'; RegVersion: '3.7'; APIVersion: 1013; CanUseLatest: True) ); {$ENDIF} {$IFDEF PYTHON23} diff --git a/PythonForDelphi/Components/Sources/Core/VarPyth.pas b/PythonForDelphi/Components/Sources/Core/VarPyth.pas index 2a41d135..d0391519 100644 --- a/PythonForDelphi/Components/Sources/Core/VarPyth.pas +++ b/PythonForDelphi/Components/Sources/Core/VarPyth.pas @@ -180,14 +180,14 @@ TPythonVariantType = class(TInvokeableVariantType, IVarInstanceReference) const Arguments: TVarDataArray): Boolean; override; function GetProperty(var Dest: TVarData; const V: TVarData; const AName: string): Boolean; override; - function SetProperty({$IF FPC_FULLVERSION > 30000}var{$ELSE}const{$ENDIF} V: TVarData; const AName: string; + function SetProperty({$IF FPC_FULLVERSION >= 30000}var{$ELSE}const{$ENDIF} V: TVarData; const AName: string; const Value: TVarData): Boolean; override; {$IFDEF DELPHIXE7_OR_HIGHER} procedure DispInvoke(Dest: PVarData; [Ref] const Source: TVarData; CallDesc: PCallDesc; Params: Pointer);override; {$ELSE} procedure DispInvoke(Dest: PVarData; - {$IF FPC_FULLVERSION > 30000}var{$ELSE}const{$ENDIF}Source: TVarData; CallDesc: PCallDesc; Params: Pointer);override; + {$IF FPC_FULLVERSION >= 30000}var{$ELSE}const{$ENDIF}Source: TVarData; CallDesc: PCallDesc; Params: Pointer);override; {$ENDIF} end; @@ -941,7 +941,7 @@ procedure TPythonVariantType.DispInvoke(Dest: PVarData; [Ref] const Source: TVarData; CallDesc: PCallDesc; Params: Pointer); {$ELSE} procedure TPythonVariantType.DispInvoke(Dest: PVarData; - {$IF FPC_FULLVERSION > 30000}var{$ELSE}const{$ENDIF}Source: TVarData; CallDesc: PCallDesc; Params: Pointer); + {$IF FPC_FULLVERSION >= 30000}var{$ELSE}const{$ENDIF}Source: TVarData; CallDesc: PCallDesc; Params: Pointer); {$ENDIF} {$IFDEF USESYSTEMDISPINVOKE} {$IFDEF DELPHIXE2_OR_HIGHER} @@ -1866,7 +1866,7 @@ function TPythonVariantType.RightPromotion(const V: TVarData; Result := False; end; -function TPythonVariantType.SetProperty({$IF FPC_FULLVERSION > 30000}var{$ELSE}const{$ENDIF} V: TVarData; +function TPythonVariantType.SetProperty({$IF FPC_FULLVERSION >= 30000}var{$ELSE}const{$ENDIF} V: TVarData; const AName: string; const Value: TVarData): Boolean; var _newValue : PPyObject; diff --git a/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas b/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas index 0060fead..c257127e 100644 --- a/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas +++ b/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas @@ -1106,7 +1106,7 @@ function PythonToSet(ASet : PPyObject; APropInfo: PPropInfo) : Integer; {$IFDEF FPC} function GetPropValue(Instance: TObject; PropInfo: PPropInfo): Variant; begin - {$IF FPC_FULLVERSION<30000} + {$IF FPC_FULLVERSION<=30000} Result := Variants.GetPropValue(Instance, PropInfo^.Name); {$ELSE} Result := Variants.GetPropValue(Instance, PropInfo, False); @@ -1115,7 +1115,7 @@ function GetPropValue(Instance: TObject; PropInfo: PPropInfo): Variant; procedure SetPropValue(Instance: TObject; PropInfo: PPropInfo; const Value: Variant); begin - {$IF FPC_FULLVERSION<30000} + {$IF FPC_FULLVERSION<=30000} Variants.SetPropValue(Instance, PropInfo^.Name, Value); {$ELSE} Variants.SetPropValue(Instance, PropInfo, Value); From e8b0abda6e38c6d4eb1585e8af06fa2e4561c93a Mon Sep 17 00:00:00 2001 From: Christian Ulrich Date: Sat, 3 Feb 2018 03:37:49 +0100 Subject: [PATCH 23/25] Fix compiling on arm --- PythonForDelphi/Components/Sources/Core/PythonEngine.pas | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index 7a70a24d..8f426306 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -9720,6 +9720,7 @@ function PyType_HasFeature(AType : PPyTypeObject; AFlag : Integer) : Boolean; procedure MaskFPUExceptions(ExceptionsMasked : boolean; MatchPythonPrecision : Boolean); begin + {$IFNDEF CPUX86 OR CPUX86_64} if MatchPythonPrecision then begin if ExceptionsMasked then Set8087CW($1232 or $3F) @@ -9731,6 +9732,7 @@ procedure MaskFPUExceptions(ExceptionsMasked : boolean; else Set8087CW($1332); end; + {$ENDIF} end; {$IFDEF MSWINDOWS} From a4a033807dd87eaf5e739259e57b40e80416cb61 Mon Sep 17 00:00:00 2001 From: Christian Ulrich Date: Sat, 3 Feb 2018 09:09:27 +0100 Subject: [PATCH 24/25] Use CPUARm define for better Delphi Compatibility --- PythonForDelphi/Components/Sources/Core/PythonEngine.pas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index 8f426306..e9e7aa99 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -9720,7 +9720,7 @@ function PyType_HasFeature(AType : PPyTypeObject; AFlag : Integer) : Boolean; procedure MaskFPUExceptions(ExceptionsMasked : boolean; MatchPythonPrecision : Boolean); begin - {$IFNDEF CPUX86 OR CPUX86_64} + {$IFNDEF CPUARM} if MatchPythonPrecision then begin if ExceptionsMasked then Set8087CW($1232 or $3F) From bf83af38c1f2feeeb55934c72aebdb92dde00f06 Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 12 Dec 2019 09:09:01 +0100 Subject: [PATCH 25/25] Fix compiling with fpc --- .../Components/Sources/Core/PythonEngine.pas | 18 ++++++++++-------- .../Components/Sources/Core/VarPyth.pas | 8 ++++---- .../Components/Sources/Core/WrapDelphi.pas | 11 ++++++++--- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas index 588e8ddd..cbc0dc30 100644 --- a/PythonForDelphi/Components/Sources/Core/PythonEngine.pas +++ b/PythonForDelphi/Components/Sources/Core/PythonEngine.pas @@ -3175,7 +3175,9 @@ procedure MaskFPUExceptions(ExceptionsMasked : boolean; Converts line breaks to LF and optionally adds a line break at the end *) function CleanString(const s : AnsiString; AppendLF : Boolean = True) : AnsiString; overload; +{$ifndef FPC} function CleanString(const s : string; AppendLF : Boolean = True) : string; overload; +{$ENDIF} //####################################################### //## ## @@ -5349,12 +5351,12 @@ function TPythonEngine.Run_CommandAsObjectWithDict(const command : AnsiString; m procedure TPythonEngine.ExecStrings( strings : TStrings ); begin - Py_XDecRef( Run_CommandAsObject( EncodeString(strings.Text) , file_input ) ); + Py_XDecRef( Run_CommandAsObject( EncodeString(strings.Text) , file_input ) ); end; function TPythonEngine.EvalStrings( strings : TStrings ) : PPyObject; begin - Result := Run_CommandAsObject( EncodeString(strings.Text) , eval_input ); + Result := Run_CommandAsObject( EncodeString(strings.Text) , eval_input ); end; procedure TPythonEngine.ExecString(const command : AnsiString; locals, globals : PPyObject ); @@ -5364,7 +5366,7 @@ procedure TPythonEngine.ExecString(const command : AnsiString; locals, globals : procedure TPythonEngine.ExecStrings( strings : TStrings; locals, globals : PPyObject ); begin - Py_XDecRef( Run_CommandAsObjectWithDict( EncodeString(strings.Text), file_input, locals, globals ) ); + Py_XDecRef( Run_CommandAsObjectWithDict( EncodeString(strings.Text), file_input, locals, globals ) ); end; function TPythonEngine.EvalString( const command : AnsiString; locals, globals : PPyObject ) : PPyObject; @@ -5374,12 +5376,12 @@ function TPythonEngine.EvalString( const command : AnsiString; locals, globals : function TPythonEngine.EvalStrings( strings : TStrings; locals, globals : PPyObject ) : PPyObject; begin - Result := Run_CommandAsObjectWithDict( EncodeString(strings.Text), eval_input, locals, globals ); + Result := Run_CommandAsObjectWithDict( EncodeString(strings.Text), eval_input, locals, globals ); end; function TPythonEngine.EvalStringsAsStr( strings : TStrings ) : String; begin - Result := Run_CommandAsString( EncodeString(strings.Text), eval_input ); + Result := Run_CommandAsString( EncodeString(strings.Text), eval_input ); end; function TPythonEngine.CheckEvalSyntax( const str : AnsiString ) : Boolean; @@ -5971,7 +5973,7 @@ function TPythonEngine.VariantAsPyObject( const V : Variant ) : PPyObject; // detect if the variant supports this special property if Assigned(Disp) and (Disp.GetIDsOfNames(GUID_NULL, @wStr, 1, 0, @DispID) = S_OK) then begin - myInt := DeRefV.__asPPyObject__; //Returns the address to PPyObject as integer. (See impl. in PythonAtom.pas) + myInt := Integer(DeRefV.__asPPyObject__); //Returns the address to PPyObject as integer. (See impl. in PythonAtom.pas) Result := PPyObject(myInt); Py_XIncRef(Result); end @@ -9859,14 +9861,14 @@ function CleanString(const s : AnsiString; AppendLF : Boolean) : AnsiString; if AppendLF and (result[length(result)] <> LF) then Result := Result + LF; end; - +{$ifndef FPC} function CleanString(const s : string; AppendLF : Boolean) : string; begin Result := AdjustLineBreaks(s, tlbsLF); if AppendLF and (result[length(result)] <> LF) then Result := Result + LF; end; - +{$endif} {$IFDEF MSWINDOWS} function IsPythonVersionRegistered(PythonVersion : string; out InstallPath: string; out AllUserInstall: Boolean) : Boolean; diff --git a/PythonForDelphi/Components/Sources/Core/VarPyth.pas b/PythonForDelphi/Components/Sources/Core/VarPyth.pas index 5597e0d8..c83ba94c 100644 --- a/PythonForDelphi/Components/Sources/Core/VarPyth.pas +++ b/PythonForDelphi/Components/Sources/Core/VarPyth.pas @@ -1382,7 +1382,7 @@ function TPythonVariantType.GetPropertyWithArg(var Dest: TVarData; // So: myList[0] won't work, but myObj.MyList[0] will!!! if PySequence_Check(_prop) <> 0 then begin - _result := PySequence_GetItem(_prop, Variant(AArg)); + _result := PySequence_GetItem(_prop, Integer(Variant(AArg))); CheckError; end; // of if end; // of if @@ -1472,13 +1472,13 @@ function TPythonVariantType.EvalPython(const V: TVarData; if not Assigned(_value) then raise Exception.Create(SCantConvertValueToPythonObject); if PyList_Check(AObject) then - _result := PyList_SetItem( AObject, Variant(AKey), _value ) + _result := PyList_SetItem( AObject, Integer(Variant(AKey)), _value ) else if PyTuple_Check(AObject) then - _result := PyTuple_SetItem( AObject, Variant(AKey), _value ) + _result := PyTuple_SetItem( AObject, Integer(Variant(AKey)), _value ) else try if PySequence_Check(AObject) <> 0 then - _result := PySequence_SetItem(AObject, Variant(AKey), _value) + _result := PySequence_SetItem(AObject, Integer(Variant(AKey)), _value) else _result := PyObject_SetItem( AObject, _key, _value ); finally diff --git a/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas b/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas index f45d5563..71194c96 100644 --- a/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas +++ b/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas @@ -331,7 +331,7 @@ interface uses SysUtils, Classes, PythonEngine, TypInfo, Variants, -{$IFNDEF FPC} + {$IFNDEF FPC} {$IFDEF EXTENDED_RTTI} Rtti, {$ELSE} @@ -835,7 +835,7 @@ TPyDelphiWrapper = class(TEngineClient, IFreeNotificationSubscriber) function SetToPython(APropInfo: PPropInfo; AValue : Integer) : PPyObject; overload; function SetToPython(AInstance: TObject; APropInfo: PPropInfo) : PPyObject; overload; function PythonToSet(APropInfo: PPropInfo; ASet : PPyObject) : Integer; overload; - function PythonToSet(ATypeInfo: PTypeInfo; ASet : PPyObject) : Integer; overload + function PythonToSet(ATypeInfo: PTypeInfo; ASet : PPyObject) : Integer; overload; function SupportsFreeNotification(AObject : TObject) : Boolean; procedure RaiseNotifyEvent(PyDelphiWrapper : TPyDelphiWrapper; ACallable : PPyObject; Sender: TObject); @@ -1246,7 +1246,7 @@ function SetToPython(AInstance: TObject; APropInfo: PPropInfo) : PPyObject; over Result := SetToPython(APropInfo, GetOrdProp(AInstance, APropInfo)); end; -function PythonToSet(ATypeInfo: PTypeInfo; ASet : PPyObject) : Integer; overload +function PythonToSet(ATypeInfo: PTypeInfo; ASet : PPyObject) : Integer; overload; var i : Integer; EnumObj: PPyObject; @@ -1777,11 +1777,16 @@ function TPyDelphiObject.GetAttrO(key: PPyObject): PPyObject; var KeyName: string; ErrMsg : string; +{$ifndef FPC} {$IFNDEF EXTENDED_RTTI} Info: PMethodInfoHeader; PropInfo: PPropInfo; Obj : TObject; {$ENDIF} +{$else} + PropInfo: PPropInfo; + Obj : TObject; +{$endif} begin Result := inherited GetAttrO(key); if GetPythonEngine.PyErr_Occurred = nil then Exit; // We found what we wanted