[arch-commits] Commit in mysql-workbench/trunk (7 files)

Christian Hesse eworm at archlinux.org
Tue Jan 12 17:06:56 UTC 2016


    Date: Tuesday, January 12, 2016 @ 18:06:56
  Author: eworm
Revision: 156178

upgpkg: mysql-workbench 6.3.6-2

Back in 2013 we decided to replace upstream MySQL by Oracle with MariaDB [0].
Sadly forks tend to diverge over time and MariaDB is no longer a drop in
replacement. Take a look at the numerous patches for details.
Thus I decided to bundle upstream libraries:

* mysql (libmysqlclient.so, mysql, mysqldump)
* mysql-connector-c++ (libmysqlcppconn.so)
* gdal (libgdal.so) (Arch's gdal is linked against MariaDB's libmysqlclient
  and makes versions clash)

As a result we have more build instructions but fewer (quick'n'dirty) patches.

We can drop mysql-connector-c++ to AUR once this hits [community].

[0] https://www.archlinux.org/news/mariadb-replaces-mysql-in-repositories/

Added:
  mysql-workbench/trunk/0002-mysql-connector-c++-json.patch
Modified:
  mysql-workbench/trunk/PKGBUILD
  mysql-workbench/trunk/arch_linux_profile.xml
Deleted:
  mysql-workbench/trunk/0007-mysql-workbench-no-set-gtid-purged.patch
  mysql-workbench/trunk/0009-mysql-workbench-gnome-keyring.patch
  mysql-workbench/trunk/0010-mysql-workbench-object.patch
  mysql-workbench/trunk/0013-mysql-workbench-no-json.patch

-----------------------------------------------+
 0002-mysql-connector-c++-json.patch           |   41 +++++++
 0007-mysql-workbench-no-set-gtid-purged.patch |   29 -----
 0009-mysql-workbench-gnome-keyring.patch      |   17 ---
 0010-mysql-workbench-object.patch             |   13 --
 0013-mysql-workbench-no-json.patch            |   58 ----------
 PKGBUILD                                      |  129 +++++++++++++++---------
 6 files changed, 123 insertions(+), 164 deletions(-)

Added: 0002-mysql-connector-c++-json.patch
===================================================================
--- 0002-mysql-connector-c++-json.patch	                        (rev 0)
+++ 0002-mysql-connector-c++-json.patch	2016-01-12 17:06:56 UTC (rev 156178)
@@ -0,0 +1,41 @@
+diff --git a/cppconn/datatype.h b/cppconn/datatype.h
+index 7ada3bc..50c71cf 100644
+--- a/cppconn/datatype.h
++++ b/cppconn/datatype.h
+@@ -59,7 +59,8 @@ public:
+ 		GEOMETRY,
+ 		ENUM,
+ 		SET,
+-		SQLNULL
++		SQLNULL,
++		JSON
+ 	};
+ };
+ 
+diff --git a/driver/mysql_metadata.cpp b/driver/mysql_metadata.cpp
+index 8d3ef8b..2faf454 100644
+--- a/driver/mysql_metadata.cpp
++++ b/driver/mysql_metadata.cpp
+@@ -4736,6 +4736,9 @@ MySQL_ConnectionMetaData::supportsConvert(int fromType, int toType)
+ 			}
+ 		}
+ 
++		case sql::DataType::JSON:
++			return false;
++
+ 		// MySQL doesn't support a NULL type
+ 		case sql::DataType::SQLNULL:
+ 			return false;
+diff --git a/driver/mysql_util.cpp b/driver/mysql_util.cpp
+index af5a7f4..3283eca 100644
+--- a/driver/mysql_util.cpp
++++ b/driver/mysql_util.cpp
+@@ -431,6 +431,8 @@ mysql_type_to_datatype(const MYSQL_FIELD * const field)
+ 			return sql::DataType::SET;
+ 		case MYSQL_TYPE_GEOMETRY:
+ 			return sql::DataType::GEOMETRY;
++		case MYSQL_TYPE_JSON:
++			return sql::DataType::JSON;
+ 		default:
+ 			return sql::DataType::UNKNOWN;
+ 	}

Deleted: 0007-mysql-workbench-no-set-gtid-purged.patch
===================================================================
--- 0007-mysql-workbench-no-set-gtid-purged.patch	2016-01-12 16:29:12 UTC (rev 156177)
+++ 0007-mysql-workbench-no-set-gtid-purged.patch	2016-01-12 17:06:56 UTC (rev 156178)
@@ -1,29 +0,0 @@
-diff --git a/plugins/wb.admin/frontend/wb_admin_export.py b/plugins/wb.admin/frontend/wb_admin_export.py
-index 40f5167..ebf6c3d 100644
---- a/plugins/wb.admin/frontend/wb_admin_export.py
-+++ b/plugins/wb.admin/frontend/wb_admin_export.py
-@@ -1858,8 +1858,6 @@ class WbAdminExportTab(WbAdminSchemaListTab):
-                 args.append("--ssl-cipher=%s" % conn["sslCipher"])
- 
-         # Sets the compatibility parameters if needed
--        if self._compatibility_params:
--          args.append("--set-gtid-purged=OFF")
-         if conn.get("OPT_ENABLE_CLEARTEXT_PLUGIN", ""):
-             args.append("--enable-cleartext-plugin")
- 
-diff --git a/plugins/wb.admin/frontend/wb_admin_export_options.py b/plugins/wb.admin/frontend/wb_admin_export_options.py
-index e9ec2e7..653f531 100644
---- a/plugins/wb.admin/frontend/wb_admin_export_options.py
-+++ b/plugins/wb.admin/frontend/wb_admin_export_options.py
-@@ -53,9 +53,9 @@ export_options = {
-     "order-by-primary":["Dump each table's rows sorted by its primary key, or by its first unique index.","FALSE"],
-     "dump-date":["Include dump date as \"Dump completed on\" comment if --comments is given.","TRUE"],
-     "$internal$show-internal-schemas":["Show internal MySQL schemas (mysql, information_schema, performance_schema) in the export schema list.","FALSE"],
--    "tz-utc":["Add SET TIME_ZONE='+00:00' to the dump file.","TRUE"],
-+    "tz-utc":["Add SET TIME_ZONE='+00:00' to the dump file.","TRUE"]
- #    "xml":["Produce XML output.","FALSE"]
--    "set-gtid-purged":["Add 'SET @@GLOBAL.GTID_PURGED' to the output.","AUTO","STR",("5.6.9", None)]
-+#   "set-gtid-purged":["Add 'SET @@GLOBAL.GTID_PURGED' to the output.","AUTO","STR",("5.6.9", None)]
-     }
- 
-     }

Deleted: 0009-mysql-workbench-gnome-keyring.patch
===================================================================
--- 0009-mysql-workbench-gnome-keyring.patch	2016-01-12 16:29:12 UTC (rev 156177)
+++ 0009-mysql-workbench-gnome-keyring.patch	2016-01-12 17:06:56 UTC (rev 156178)
@@ -1,17 +0,0 @@
-diff --git a/frontend/linux/workbench/mysql-workbench.in b/frontend/linux/workbench/mysql-workbench.in
-index 02a8061..f8176f6 100755
---- a/frontend/linux/workbench/mysql-workbench.in
-+++ b/frontend/linux/workbench/mysql-workbench.in
-@@ -4,6 +4,12 @@
- # This will cause passwords to be stored only temporarily for the session.
- #WB_NO_GNOME_KEYRING=1
- 
-+# Looks like WB expects gnome-keyring to be present as soon as XDG_RUNTIME_DIR
-+# environment variable is set. Do an extra check here...
-+if ! type gnome-keyring-daemon >/dev/null 2>/dev/null; then
-+	export WB_NO_GNOME_KEYRING=1
-+fi
-+
- # force disable the Mac style single menu hack in Ubuntu Unity
- export UBUNTU_MENUPROXY=0
- 

Deleted: 0010-mysql-workbench-object.patch
===================================================================
--- 0010-mysql-workbench-object.patch	2016-01-12 16:29:12 UTC (rev 156177)
+++ 0010-mysql-workbench-object.patch	2016-01-12 17:06:56 UTC (rev 156178)
@@ -1,13 +0,0 @@
-diff --git a/plugins/migration/copytable/copytable.cpp b/plugins/migration/copytable/copytable.cpp
-index 7b760e0..ec05d11 100644
---- a/plugins/migration/copytable/copytable.cpp
-+++ b/plugins/migration/copytable/copytable.cpp
-@@ -1922,7 +1922,7 @@ MySQLCopyDataTarget::MySQLCopyDataTarget(const std::string &hostname, int port,
-   mysql_init(&_mysql);
- #if defined(MYSQL_VERSION_MAJOR) && defined(MYSQL_VERSION_MINOR) && defined(MYSQL_VERSION_PATCH)
- #if MYSQL_CHECK_VERSION(5,6,6)
--  if (is_mysql_version_at_least(5,6,6))
-+  if (MySQLCopyDataTarget::is_mysql_version_at_least(5,6,6))
-     mysql_options4(&_mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", app_name.c_str());
- #endif
- #endif

Deleted: 0013-mysql-workbench-no-json.patch
===================================================================
--- 0013-mysql-workbench-no-json.patch	2016-01-12 16:29:12 UTC (rev 156177)
+++ 0013-mysql-workbench-no-json.patch	2016-01-12 17:06:56 UTC (rev 156178)
@@ -1,58 +0,0 @@
-diff --git a/plugins/migration/copytable/copytable.cpp b/plugins/migration/copytable/copytable.cpp
-index de52d91..2df53a4 100644
---- a/plugins/migration/copytable/copytable.cpp
-+++ b/plugins/migration/copytable/copytable.cpp
-@@ -79,7 +79,7 @@ static const char *mysql_field_type_to_name(enum enum_field_types type)
-     case MYSQL_TYPE_VAR_STRING: return "MYSQL_TYPE_VAR_STRING";
-     case MYSQL_TYPE_STRING: return "MYSQL_TYPE_STRING";
-     case MYSQL_TYPE_GEOMETRY: return "MYSQL_TYPE_GEOMETRY";
--    case MYSQL_TYPE_JSON: return "MYSQL_TYPE_JSON";
-+//    case MYSQL_TYPE_JSON: return "MYSQL_TYPE_JSON";
-     default:
-       return "UNKNOWN";
-   }
-@@ -241,7 +241,7 @@ RowBuffer::RowBuffer(boost::shared_ptr<std::vector<ColumnInfo> > columns,
-       case MYSQL_TYPE_STRING:
-       case MYSQL_TYPE_VAR_STRING:
-       case MYSQL_TYPE_BIT:
--      case MYSQL_TYPE_JSON:
-+//      case MYSQL_TYPE_JSON:
-         if (!col->is_long_data)
-           bind.buffer_length = (unsigned)col->source_length+1;
- 
-@@ -1551,8 +1551,8 @@ bool MySQLCopyDataSource::fetch_row(RowBuffer &rowbuffer)
-             rowbuffer[index].buffer_type == MYSQL_TYPE_LONG_BLOB ||
-             rowbuffer[index].buffer_type == MYSQL_TYPE_BLOB ||
-             rowbuffer[index].buffer_type == MYSQL_TYPE_STRING ||
--            rowbuffer[index].buffer_type == MYSQL_TYPE_GEOMETRY ||
--            rowbuffer[index].buffer_type == MYSQL_TYPE_JSON)
-+            rowbuffer[index].buffer_type == MYSQL_TYPE_GEOMETRY)
-+//            rowbuffer[index].buffer_type == MYSQL_TYPE_JSON)
-           {
-             if (rowbuffer[index].buffer_length)
-               free(rowbuffer[index].buffer);
-@@ -2357,7 +2357,7 @@ bool MySQLCopyDataTarget::append_bulk_column(size_t col_index)
-     case MYSQL_TYPE_STRING:
-     case MYSQL_TYPE_ENUM:
-     case MYSQL_TYPE_SET:
--    case MYSQL_TYPE_JSON:
-+//    case MYSQL_TYPE_JSON:
-       _bulk_insert_record.append("'", 1);
-       ret_val = _bulk_insert_record.append_escaped((char*)(*_row_buffer)[col_index].buffer, *(*_row_buffer)[col_index].length);
-       _bulk_insert_record.append("'", 1);
-diff --git a/backend/wbpublic/objimpl/db.query/db_query_Resultset.cpp b/backend/wbpublic/objimpl/db.query/db_query_Resultset.cpp
-index f5c2ffb..b42ba6a 100644
---- a/backend/wbpublic/objimpl/db.query/db_query_Resultset.cpp
-+++ b/backend/wbpublic/objimpl/db.query/db_query_Resultset.cpp
-@@ -300,9 +300,9 @@ public:
-         case sql::DataType::SET:
-           type= "string";
-           break;
--        case sql::DataType::JSON:
-+      /*  case sql::DataType::JSON:
-           type = "json";
--          break;
-+          break; */
-         case sql::DataType::SQLNULL:
-           type = "null";
-           break;          

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2016-01-12 16:29:12 UTC (rev 156177)
+++ PKGBUILD	2016-01-12 17:06:56 UTC (rev 156178)
@@ -7,16 +7,20 @@
 
 pkgname=mysql-workbench
 pkgver=6.3.6
-pkgrel=1
+pkgrel=2
+_mysql_version=5.7.10
+_connector_version=1.1.6
+_gdal_version=2.0.1
+_boost_version=1.59.0
 pkgdesc='A cross-platform, visual database design tool developed by MySQL'
 arch=('i686' 'x86_64')
 url='https://www.mysql.com/products/workbench/'
 license=('GPL2')
-depends=('python2' 'libzip' 'libmariadbclient' 'gtkmm' 'ctemplate'
-	'libgnome-keyring' 'libgl' 'python2-paramiko' 'python2-pexpect' 'gdal'
+depends=('python2' 'libzip' 'gtkmm' 'ctemplate'
+	'libgnome-keyring' 'libgl' 'python2-paramiko' 'python2-pexpect'
 	'pcre' 'tinyxml' 'libxml2' 'mysql-python' 'cairo'
 	'python2-cairo' 'hicolor-icon-theme' 'desktop-file-utils' 'libiodbc'
-	'mysql-connector-c++' 'vsqlite++' 'unixodbc' 'freetype2'
+	'vsqlite++' 'unixodbc' 'freetype2'
 	'libantlr3c')
 optdepends=('gnome-keyring: store SSH/MySQL passwords in GNOME password manager'
 	'python2-pyodbc: database migration')
@@ -24,22 +28,26 @@
 install=mysql-workbench.install
 validpgpkeys=('A4A9406876FCBD3C456770C88C718D3B5072E1F5')
 source=("http://cdn.mysql.com/Downloads/MySQLGUITools/mysql-workbench-community-${pkgver}-src.tar.gz"{,.asc}
+	"http://cdn.mysql.com/Downloads/MySQL-5.7/mysql-${_mysql_version}.tar.gz"{,.asc}
+	"http://cdn.mysql.com/Downloads/Connector-C++/mysql-connector-c++-${_connector_version}.tar.gz"{,.asc}
+	"http://download.osgeo.org/gdal/${_gdal_version}/gdal-${_gdal_version}.tar.gz"
+	"https://downloads.sourceforge.net/project/boost/boost/${_boost_version}/boost_${_boost_version//./_}.tar.bz2"
 	'http://www.antlr3.org/download/antlr-3.4-complete.jar'
 	'0001-mysql-workbench-no-check-for-updates.patch'
-	'0007-mysql-workbench-no-set-gtid-purged.patch'
-	'0009-mysql-workbench-gnome-keyring.patch'
-	'0010-mysql-workbench-object.patch'
-	'0013-mysql-workbench-no-json.patch'
+	'0002-mysql-connector-c++-json.patch'
 	'arch_linux_profile.xml')
 sha256sums=('c51fce1a3fd9425dd9adf4d16e24e84f92e2f8374b43a956f580fd84d03afe62'
             'SKIP'
+            '1ea1644884d086a23eafd8ccb04d517fbd43da3a6a06036f23c5c3a111e25c74'
+            'SKIP'
+            'ad710b3900cae3be94656825aa70319cf7a96e1ad46bf93e07275f3606f69447'
+            'SKIP'
+            'b55f794768e104a2fd0304eaa61bb8bda3dc7c4e14f2c9d0913baca3e55b83ab'
+            '727a932322d94287b62abb1bd2d41723eec4356a7728909e38adb65ca25241ca'
             '9d3e866b610460664522520f73b81777b5626fb0a282a5952b9800b751550bf7'
             'b189e15c6b6f5a707357d9a9297f39ee3a33264fd28b44d5de6f537f851f82cf'
-            'b49d4ea352d2c2013b9c5834668c44521a0a2c5f9c7e3fe746ad94ce0d2bb865'
-            '9c2ae2fe7a4f59502bdcf591a07353c350b0ba29c3935c8242d97848cc0e50d3'
-            '2bc79f935cd5059409d32aa64832b7aa2c49ba533cc93d40a063bcbfe01a4485'
-            '663b6eed3715988e16a695f5810bdfb7e76aaeb28baaf4b11b2a73ee2bcb403d'
-            '28724c4b4cec29ce19aada08279df1b086381cd788fef7ae07c1860f7d17af7e')
+            '4beb8b6c92f6b2b2189bfdd2f1a073ad54d501f05ef4686e47c661b40f63b9d3'
+            '2ade582ca25f6d6d748bc84a913de39b34dcaa6e621a77740fe143007f2833af')
 
 prepare() {
 	cd "${srcdir}/mysql-workbench-community-${pkgver}-src/"
@@ -48,57 +56,84 @@
 	# Updates are provided via Arch Linux packages
 	patch -Np1 < "${srcdir}"/0001-mysql-workbench-no-check-for-updates.patch
 
-	# mysqldump from mariadb (currently 1.0.16) does not support --set-gtid-purged
-	patch -Np1 < "${srcdir}"/0007-mysql-workbench-no-set-gtid-purged.patch
-
-	# fix gnome-keyring
-	patch -Np1 < "${srcdir}"/0009-mysql-workbench-gnome-keyring.patch
-
-	# fix cannot call member function without object
-	patch -Np1 < "${srcdir}"/0010-mysql-workbench-object.patch
-
-	# we have no JSON, probably missing in mariadb
-	patch -Np1 < "${srcdir}"/0013-mysql-workbench-no-json.patch
-
-	# make cmake happy with mariadb
-	sed -i '/^find_package(MySQL /c find_package(MySQL REQUIRED)' \
-		CMakeLists.txt
-
 	# we need python 2.x
 	sed -i '/^FIND_PROGRAM(PYTHON_EXEC /c FIND_PROGRAM(PYTHON_EXEC "python2")' \
 		CMakeLists.txt
 
-	# fix the swig workaround
-	sed -i '/SWIG_VERSION/s/0x030008/0x030006/' \
-		library/forms/mforms/textbox.h \
-		library/forms/swig/mforms.i
+	# MySQL connector C++ is lagging behind and misses JSON support
+	cd "${srcdir}/mysql-connector-c++-${_connector_version}/"
+	patch -Np1 < "${srcdir}"/0002-mysql-connector-c++-json.patch
 
-	# fix GDAL
-	sed -i '/#include/s|gdal/||' \
-		backend/wbpublic/grtui/geom_draw_box.h \
-		backend/wbpublic/grt/spatial_handler.h \
-		backend/wbpublic/objimpl/db.query/db_query_Resultset.cpp
-
-
 	# put antlr into place
 	install -D ${srcdir}/antlr-3.4-complete.jar ${srcdir}/linux-res/bin/antlr-3.4-complete.jar
 }
 
 build() {
-	cd "${srcdir}/mysql-workbench-community-${pkgver}-src/"
+	# Build mysql
+	cd "${srcdir}/mysql-${_mysql_version}"
+	cmake . \
+		-DBUILD_CONFIG=mysql_release \
+		-DCMAKE_INSTALL_PREFIX=/usr \
+		-DCMAKE_INSTALL_LIBDIR=lib \
+		-DSYSCONFDIR=/etc/mysql \
+		-DMYSQL_DATADIR=/var/lib/mysql \
+		-DWITH_BOOST="${srcdir}/boost_${_boost_version//./_}"
+	make
+	make DESTDIR="${srcdir}/install-bundle/" install
 
-	# link to libsigc++, which requires ISO C++ 2011 standard
-	# so add the flag to enable c++11
+	# Build mysql-connector-c++
+	cd "${srcdir}/mysql-connector-c++-${_connector_version}/"
 	cmake . \
-		-DCMAKE_INSTALL_PREFIX:PATH=/usr \
-		-DCMAKE_CXX_FLAGS="-std=c++11"
+		-Wno-dev \
+		-DCMAKE_INSTALL_PREFIX=/usr \
+		-DCMAKE_BUILD_TYPE=Release \
+		-DCMAKE_INSTALL_LIBDIR=lib \
+		-DMYSQLCPPCONN_BUILD_EXAMPLES=OFF \
+		-DMYSQL_DIR="${srcdir}/install-bundle/" \
+		-DMYSQL_CONFIG_EXECUTABLE="${srcdir}/install-bundle/usr/bin/mysql_config" \
+		-DBOOST_ROOT:STRING="${srcdir}/boost_${_boost_version//./_}"
 
+	make DESTDIR="${srcdir}/install-bundle/" install
+
+	# Build gdal
+	cd "${srcdir}/gdal-${_gdal_version}/"
+	./configure \
+		--prefix=/usr \
+		--includedir=/usr/include/gdal \
+		--with-sqlite3 \
+		--with-mysql="${srcdir}/install-bundle/usr/bin/mysql_config" \
+		--with-curl
 	make
+	make DESTDIR="${srcdir}/install-bundle/" install
+
+	# Build MySQL Workbench itself with bundled libs
+	cd "${srcdir}/mysql-workbench-community-${pkgver}-src/"
+	cmake . \
+		-DCMAKE_INSTALL_PREFIX:PATH=/usr \
+		-DCMAKE_CXX_FLAGS="-std=c++11" \
+		-DCMAKE_BUILD_TYPE=Release \
+		-DMySQL_CONFIG_PATH="${srcdir}/install-bundle/usr/bin/mysql_config" \
+		-DMYSQLCPPCONN_LIBRARY="-L${srcdir}/install-bundle/usr/lib -lmysqlcppconn" \
+		-DMYSQLCPPCONN_INCLUDE_DIR="${srcdir}/install-bundle/usr/include" \
+		-DGDAL_INCLUDE_DIR="${srcdir}/install-bundle/usr/include" \
+		-DGDAL_LIBRARY="${srcdir}/install-bundle/usr/lib/libgdal.so" \
+		-DUSE_BUNDLED_MYSQLDUMP=1
+	make
 }
 
 package() {
-	cd "${srcdir}/mysql-workbench-community-${pkgver}-src"
+	# install bundled libraries files and files
+	for LIBRARY in $(find "${srcdir}/install-bundle/usr/lib/" -type f -regex '.*/lib\(gdal\|mysql\(client\|cppconn\)\)\.so\..*'); do
+		install -D -m0755 "${LIBRARY}" "${pkgdir}"/usr/lib/mysql-workbench/"$(basename "${LIBRARY}")"
+	done
+	for SYMLINK in $(find "${srcdir}/install-bundle/usr/lib/" -type l -regex '.*/lib\(gdal\|mysql\(client\|cppconn\)\)\.so\..*'); do
+		ln -s "$(readlink "${SYMLINK}")" "${pkgdir}"/usr/lib/mysql-workbench/"$(basename "${SYMLINK}")"
+	done
+	install -m0755 "${srcdir}/install-bundle/usr/bin/mysql"{,dump} "${pkgdir}"/usr/lib/mysql-workbench/
 
+	# install MySQL Workbench itself
+	cd "${srcdir}/mysql-workbench-community-${pkgver}-src/"
+
 	make DESTDIR="${pkgdir}" install
 
 	# icons
@@ -110,6 +145,6 @@
 	done
 
 	install -D -m 0644 "${srcdir}"/arch_linux_profile.xml \
-		"${pkgdir}"/usr/share/mysql-workbench/mysql.profiles/Arch_Linux_\(MariaDB_5.5_Package\).xml
+		"${pkgdir}"/usr/share/mysql-workbench/mysql.profiles/Arch_Linux_\(MariaDB\).xml
 }
 

Modified: arch_linux_profile.xml
===================================================================
(Binary files differ)



More information about the arch-commits mailing list