summaryrefslogtreecommitdiff
path: root/databases/heidisql
diff options
context:
space:
mode:
Diffstat (limited to 'databases/heidisql')
-rw-r--r--databases/heidisql/Makefile53
-rw-r--r--databases/heidisql/distinfo3
-rw-r--r--databases/heidisql/files/patch-source_apphelpers.pas63
-rw-r--r--databases/heidisql/files/patch-source_dbconnection.pas127
-rw-r--r--databases/heidisql/files/pkg-message.in26
-rw-r--r--databases/heidisql/pkg-descr5
-rw-r--r--databases/heidisql/pkg-plist9
7 files changed, 286 insertions, 0 deletions
diff --git a/databases/heidisql/Makefile b/databases/heidisql/Makefile
new file mode 100644
index 000000000000..74f024f7d6c5
--- /dev/null
+++ b/databases/heidisql/Makefile
@@ -0,0 +1,53 @@
+PORTNAME= heidisql
+DISTVERSION= 12.14.1.1
+DISTVERSIONPREFIX= v
+CATEGORIES= databases
+PKGNAMESUFFIX= ${LAZARUS_PKGNAMESUFFIX}
+
+MAINTAINER= acm@FreeBSD.org
+COMMENT= a lightweight client for managing multiple databases
+WWW= https://www.heidisql.com/
+
+LICENSE= GPLv2
+
+ONLY_FOR_ARCHS= aarch64 amd64 i386
+
+USES= desktop-file-utils fpc lazarus:flavors xorg
+USE_XORG= x11
+USE_GITHUB= yes
+GH_ACCOUNT= HeidiSQL
+GH_PROJECT= HeidiSQL
+GH_TAGNAME= 2967ad28b4e3172e302cb8d487c0d3a5c752b3f
+
+LAZARUS_PROJECT_FILES+= heidisql.lpi
+
+LAZBUILD_ARGS= -d
+
+gtk2_CONFLICTS_INSTALL= ${PORTNAME}-qt5 ${PORTNAME}-qt6
+qt5_CONFLICTS_INSTALL= ${PORTNAME}-gtk2 ${PORTNAME}-qt6
+qt6_CONFLICTS_INSTALL= ${PORTNAME}-gtk2 ${PORTNAME}-qt5
+
+USE_FPC_gtk2= cairo
+USE_GNOME_gtk2= cairo
+USE_FPC+= ${USE_FPC_${FLAVOR}}
+USE_GNOME+= ${USE_GNOME_${FLAVOR}}
+
+SUB_FILES= pkg-message
+
+post-patch:
+ ${REINPLACE_CMD} -e 's|FPC_FULLVERSION<30204|FPC_FULLVERSION<30203|g' \
+ ${WRKSRC}/source/main.pas ${WRKSRC}/source/usermanager.pas
+ ${REINPLACE_CMD} -e 's|System.UITypes,||g' ${WRKSRC}/source/table_editor.pas \
+ ${WRKSRC}/source/grideditlinks.pas
+ ${REINPLACE_CMD} -e 's| \+ \[ofAllowMultiSelect\]||g' ${WRKSRC}/source/main.pas
+ ${REINPLACE_CMD} -e 's|%%DATADIR%%|${DATADIR}|g' ${WRKSRC}/source/apphelpers.pas
+
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/out/${PORTNAME} ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
+ ${INSTALL_DATA} ${WRKSRC}/package-skeleton/usr/share/applications/${PORTNAME}.desktop ${STAGEDIR}${PREFIX}/share/applications/${PORTNAME}.desktop
+ @${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/256x256/apps
+ ${INSTALL_DATA} ${WRKSRC}/res/deb-package-icon.png ${STAGEDIR}${PREFIX}/share/icons/hicolor/256x256/apps/${PORTNAME}.png
+ @${MKDIR} ${STAGEDIR}${DATADIR}
+ ${INSTALL_DATA} ${WRKSRC}/extra/ini/*.ini ${STAGEDIR}${DATADIR}
+
+.include <bsd.port.mk>
diff --git a/databases/heidisql/distinfo b/databases/heidisql/distinfo
new file mode 100644
index 000000000000..e8689ddf9710
--- /dev/null
+++ b/databases/heidisql/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1765951752
+SHA256 (HeidiSQL-HeidiSQL-v12.14.1.1-2967ad28b4e3172e302cb8d487c0d3a5c752b3f_GH0.tar.gz) = 9fbbf09f21220d3f96ea37f4d869dc18cd0f3a67073ca2a8b3539473cd9c79e6
+SIZE (HeidiSQL-HeidiSQL-v12.14.1.1-2967ad28b4e3172e302cb8d487c0d3a5c752b3f_GH0.tar.gz) = 27522595
diff --git a/databases/heidisql/files/patch-source_apphelpers.pas b/databases/heidisql/files/patch-source_apphelpers.pas
new file mode 100644
index 000000000000..2d542650c371
--- /dev/null
+++ b/databases/heidisql/files/patch-source_apphelpers.pas
@@ -0,0 +1,63 @@
+--- source/apphelpers.pas 2025-12-16 11:00:34.000000000 -0800
++++ source/apphelpers.pas 2025-12-17 00:09:19.625236000 -0800
+@@ -1316,16 +1316,21 @@
+ {$IFDEF LINUX}
+ Result := '';
+ {$ENDIF}
++ {$IFDEF FREEBSD}
++ Result := '';
++ {$ENDIF}
+ end;
+
+ function GetResourcesDir: String;
+ begin
++ Result := GetAppDir;
+ // point to resources dir in macOS app bundle
+ {$IFDEF DARWIN}
+ Result := GetAppDir + '..' + DirectorySeparator + 'Resources' + DirectorySeparator;
+- {$ELSE}
+- Result := GetAppDir;
+ {$ENDIF}
++ {$IFDEF FREEBSD}
++ Result := '%%DATADIR%%/';
++ {$ENDIF}
+ end;
+
+ {**
+@@ -2911,7 +2916,7 @@
+ Output: String;
+ CmdResult: Boolean;
+ begin
+- {$IfDef LINUX}
++ {$if defined(LINUX) or defined(FREEBSD)}
+ // Netcat on Linux
+ CmdResult := Process.RunCommandInDir('', 'nc', ['-w 1 -zv 127.0.0.1 '+Port.ToString], Output);
+ Result := not CmdResult;
+@@ -3026,7 +3031,7 @@
+ FreeLibrary(NTHandle);
+ end;
+ {$EndIf}
+- {$IfDef LINUX}
++ {$if defined(LINUX) or defined(FREEBSD)}
+ IsWineStored := 0;
+ {$EndIf}
+ Result := IsWineStored = 1;
+@@ -3063,6 +3068,9 @@
+ function GetOS: String;
+ begin
+ Result := 'Unknown';
++ {$IfDef FreeBSD}
++ Result := 'FreeBSD';
++ {$EndIf}
+ {$IfDef LINUX}
+ Result := 'Linux';
+ {$EndIf}
+@@ -4569,7 +4577,7 @@
+ 1: begin // String
+ Value := StringReplace(Value, CHR13REPLACEMENT, #13, [rfReplaceAll]);
+ Value := StringReplace(Value, CHR10REPLACEMENT, #10, [rfReplaceAll]);
+- {$IfDef LINUX}
++ {$if defined(LINUX) or defined(FREEBSD)}
+ Value := ConvertWindowsToLinuxPath(Value);
+ {$EndIf}
+ FRegistry.WriteString(Name, Value);
diff --git a/databases/heidisql/files/patch-source_dbconnection.pas b/databases/heidisql/files/patch-source_dbconnection.pas
new file mode 100644
index 000000000000..bf2637ad4a58
--- /dev/null
+++ b/databases/heidisql/files/patch-source_dbconnection.pas
@@ -0,0 +1,127 @@
+--- source/dbconnection.pas 2025-12-16 22:09:54.829290000 -0800
++++ source/dbconnection.pas 2025-12-16 22:11:26.512363000 -0800
+@@ -231,10 +231,10 @@
+ end;
+ TDatabaseCache = class(TObjectList<TDBObjectList>); // A list of db object lists, used for caching
+ TDBObjectComparer = class(TComparer<TDBObject>)
+- function Compare({$IF FPC_FULLVERSION<30204}constref{$ELSE}const{$ENDIF} Left, Right: TDBObject): Integer; override;
++ function Compare({$IF FPC_FULLVERSION<30203}constref{$ELSE}const{$ENDIF} Left, Right: TDBObject): Integer; override;
+ end;
+ TDBObjectDropComparer = class(TComparer<TDBObject>)
+- function Compare({$IF FPC_FULLVERSION<30204}constref{$ELSE}const{$ENDIF} Left, Right: TDBObject): Integer; override;
++ function Compare({$IF FPC_FULLVERSION<30203}constref{$ELSE}const{$ENDIF} Left, Right: TDBObject): Integer; override;
+ end;
+
+ TOidStringPairs = TDictionary<POid, String>;
+@@ -1911,7 +1911,7 @@
+ {$If defined(WINDOWS) OR defined(DARWIN)}
+ DllPath, DllFile: String;
+ Dlls: TStringList;
+- {$ElseIf defined(LINUX)}
++ {$ElseIf defined(LINUX) OR defined(FREEBSD)}
+ LibMapOutput, LibMap: String;
+ LibMapLines: TStringList;
+ {$EndIf}
+@@ -1926,9 +1926,11 @@
+ rx.ModifierI := True;
+ case NetTypeGroup of
+ ngMySQL:
+- {$IfDef LINUX}
++ {$If defined(LINUX)}
+ // libmariadb.so.0 (libc,...) => /lib/x86_64-linux-gnu/libmariadb.so
+ rx.Expression := '^\s*lib(mysqlclient|mariadb|perconaserverclient)\.[^=]+=>\s*(\S+)$';
++ {$ElseIf defined(FREEBSD)}
++ rx.Expression := '(mysqlclient|mariadb|perconaserverclient)[^=]+=>\s*(\S+)$';
+ {$Else}
+ rx.Expression := '^lib(mysql|mariadb).*\.' + SharedSuffix;
+ {$EndIf}
+@@ -1939,14 +1941,18 @@
+ rx.Expression := '^(dblib|libsybdb).*\.' + SharedSuffix;
+ {$EndIf}
+ ngPgSQL:
+- {$IfDef LINUX}
++ {$If defined(LINUX)}
+ rx.Expression := '^\s*(libpq)[^=]+=>\s*(\S+)$';
++ {$ElseIf defined(FREEBSD)}
++ rx.Expression := '(lpq)[^=]+=>\s*(\S+)$';
+ {$Else}
+ rx.Expression := '^libpq.*\.' + SharedSuffix;
+ {$EndIf}
+ ngSQLite: begin
+- {$IfDef LINUX}
++ {$If defined(LINUX)}
+ rx.Expression := '^\s*(libsqlite3)[^=]+=>\s*(\S+)$';
++ {$ElseIf defined(FREEBSD)}
++ rx.Expression := '(lsqlite3)[^=]+=>\s*(\S+)$';
+ {$Else}
+ if NetType = ntSQLite then
+ rx.Expression := '^(lib)?sqlite.*\.' + SharedSuffix
+@@ -1959,9 +1965,13 @@
+ end;
+ case NetTypeGroup of
+ ngMySQL, ngMSSQL, ngPgSQL, ngSQLite, ngInterbase: begin
++ {$if defined(LINUX) or defined(FREEBSD)}
+ {$IfDEF LINUX}
+ // See https://serverfault.com/a/513938
+ Process.RunCommandInDir('', '/sbin/ldconfig', ['-p'], LibMapOutput);
++ {$Else}
++ Process.RunCommandInDir('', '/sbin/ldconfig', ['-r'], LibMapOutput);
++ {$EndIf}
+ LibMapLines := Explode(sLineBreak, LibMapOutput);
+ for LibMap in LibMapLines do begin
+ if rx.Exec(LibMap) and FileExists(rx.Match[2]) then begin
+@@ -3301,6 +3311,11 @@
+ begin
+ // Init libmysql before actually connecting.
+ LibraryPath := GetLibDir + Parameters.LibraryOrProvider;
++{$IF DEFINED(LINUX) OR DEFINED(FREEBSD)}
++ LibraryPath := Parameters.LibraryOrProvider;
++{$ELSE}
++ LibraryPath := ExtractFilePath(ParamStr(0)) + Parameters.LibraryOrProvider;
++{$ENDIF}
+ Log(lcDebug, f_('Loading library file %s ...', [LibraryPath]));
+ // Throws EDbError on any failure:
+ FLib := TMySQLLib.Create(LibraryPath, Parameters.DefaultLibrary);
+@@ -3315,7 +3330,11 @@
+ msg: String;
+ begin
+ // Init lib before actually connecting.
+- LibraryPath := GetLibDir + Parameters.LibraryOrProvider;
++{$IF DEFINED(LINUX) OR DEFINED(FREEBSD)}
++ LibraryPath := Parameters.LibraryOrProvider;
++{$ELSE}
++ LibraryPath := ExtractFilePath(ParamStr(0)) + Parameters.LibraryOrProvider;
++{$ENDIF}
+ Log(lcDebug, f_('Loading library file %s ...', [LibraryPath]));
+ try
+ FLib := TPostgreSQLLib.Create(LibraryPath, Parameters.DefaultLibrary);
+@@ -3346,7 +3365,11 @@
+ LibraryPath: String;
+ begin
+ // Init lib before actually connecting.
+- LibraryPath := GetLibDir + Parameters.LibraryOrProvider;
++{$IF DEFINED(LINUX) OR DEFINED(FREEBSD)}
++ LibraryPath := Parameters.LibraryOrProvider;
++{$ELSE}
++ LibraryPath := ExtractFilePath(ParamStr(0)) + Parameters.LibraryOrProvider;
++{$ENDIF}
+ Log(lcDebug, f_('Loading library file %s ...', [LibraryPath]));
+ // Throws EDbError on any failure:
+ if Parameters.NetType = ntSQLite then
+@@ -10238,14 +10261,14 @@
+
+ { TDBObjectComparer }
+
+-function TDBObjectComparer.Compare({$IF FPC_FULLVERSION<30204}constref{$ELSE}const{$ENDIF} Left, Right: TDBObject): Integer;
++function TDBObjectComparer.Compare({$IF FPC_FULLVERSION<30203}constref{$ELSE}const{$ENDIF} Left, Right: TDBObject): Integer;
+ begin
+ // Simple sort method for a TDBObjectList
+ Result := CompareAnyNode(Left.Schema+'.'+Left.Name, Right.Schema+'.'+Right.Name);
+ end;
+
+
+-function TDBObjectDropComparer.Compare({$IF FPC_FULLVERSION<30204}constref{$ELSE}const{$ENDIF} Left, Right: TDBObject): Integer;
++function TDBObjectDropComparer.Compare({$IF FPC_FULLVERSION<30203}constref{$ELSE}const{$ENDIF} Left, Right: TDBObject): Integer;
+ begin
+ // Sorting a TDBObject items so that dropping them does not trap in SQL errors
+ if (Left.NodeType = lntTrigger) and (Right.NodeType <> lntTrigger) then
diff --git a/databases/heidisql/files/pkg-message.in b/databases/heidisql/files/pkg-message.in
new file mode 100644
index 000000000000..805b720ea77e
--- /dev/null
+++ b/databases/heidisql/files/pkg-message.in
@@ -0,0 +1,26 @@
+[
+{ type: install
+ message: <<EOM
+HeidiSQL was installed
+
+1) HeidiSQL needs client library to connect to a supported database. Well
+ supported databases are MySQL/MariaDB, PostgreSQL and SQLite.
+
+ # pkg search -x "^(mysql|mariadb)[0-9].*-client-*"
+ # pkg search -x "^postgresql.*-client-*"
+ # pkg search -x "^(sqlite|sqlite3)-[2|3]"
+
+2) Do not forget install client library. E.g. an user wants use postgresql from
+ HeidiSQL.
+
+ # pkg install postgresql17-client
+
+3) HeidiSQL can be compiled and installed with supports for gtk2, qt5 or qt6
+ graphic interfaces.
+
+ # pkg install heidisql-qt6
+
+4) Enjoy it!
+EOM
+}
+]
diff --git a/databases/heidisql/pkg-descr b/databases/heidisql/pkg-descr
new file mode 100644
index 000000000000..bd2f5156743c
--- /dev/null
+++ b/databases/heidisql/pkg-descr
@@ -0,0 +1,5 @@
+HeidiSQL is a graphical interface for managing MariaDB or MySQL servers,
+Microsoft SQL databases, PostgreSQL, SQLite, Interbase or Firebird. "Heidi"
+lets you browse and edit data, create and edit tables, views, procedures,
+triggers and scheduled events. Also, you can export structure and data, either
+to SQL file, clipboard or to other servers.
diff --git a/databases/heidisql/pkg-plist b/databases/heidisql/pkg-plist
new file mode 100644
index 000000000000..74be7c7b9f38
--- /dev/null
+++ b/databases/heidisql/pkg-plist
@@ -0,0 +1,9 @@
+bin/heidisql
+share/applications/heidisql.desktop
+%%DATADIR%%/functions-mariadb.ini
+%%DATADIR%%/functions-mysql.ini
+%%DATADIR%%/functions-mysql8.ini
+%%DATADIR%%/functions-postgresql.ini
+%%DATADIR%%/functions-redshift.ini
+%%DATADIR%%/functions-sqlite.ini
+share/icons/hicolor/256x256/apps/heidisql.png