使用 Xcode 发布适用于 macOS 的 GTK+ 应用程序

kak*_*kyo 7 gtk deployment macos frameworks build

我的设置:

  • macOS 莫哈韦沙漠
  • Xcode 10.3

我正在研究使用 GTK+ 在 macOS 上发布应用程序的可能性。

不幸的是,根据 GTK+ 的 macOS 构建/捆绑/集成指南,整个过程对我来说似乎令人生畏:

本指南展示了巨大脚本的各种陷阱及其环境调整,这可能会弄乱整个操作系统。建议的开设新用户帐户的方法似乎也不太实用。

这种多合一的脚本方法,不包括任何关于 Xcode 的讨论,非常可怕,因为它让我想知道它可以多快跟上 Apple 的发展,因为 Xcode 的工具链每隔几个月就会升级一次。在项目组织和应用程序捆绑方面,Xcode 是唯一让我感到舒服的环境。

其一,是否可以使用 Apple 更成熟的动态链接系统,即 Frameworks,而不是 .dylib 方法?我找不到任何关于通过框架链接 GTK+,甚至使用 Xcode 构建系统来完成这项工作的资源或讨论。

任何提示将不胜感激。

更新

我第一次为 GTK+ 引导 macOS 构建系统的尝试在 cmake 依赖步骤中失败了,脚本甚至没有提供“中止”选项。我不得不 Ctrl-C 它:另一个负面体验。

更新 2

进展:我设法在 Xcode 10.3 中创建了一个 Hello-World 命令行程序并使其运行。基本上我避开了 GNOME 推荐的 jhbuild 路线。

我做的事情:

  1. 从自制软件安装 gtk+3 及其 Python 绑定: brew install pygobject3 gtk+3
  2. 在 Xcode 中,创建一个 C++ 命令行项目。
  3. 找出标题搜索路径:pkg-config --cflags gtk+-3.0,并将结果添加到Other C FlagsXcode 目标的Build Settings.
  4. 了解 libs: pkg-config --libs gtk+-3.0,并将结果添加到Other Linker Flags.
  5. 构建和运行。

这比 GNOME 的建议要容易得多。请注意,它的最新编辑是在 2019 年完成的,因此他们可能仍会推荐它。

我今天要尝试捆绑。

kak*_*kyo 5

因此,在玩弄了 GTK+ 和 Xcode 10 工具链一整天之后,我终于对发布使用 GTK+ 构建的 macOS 应用程序的想法更有信心了。对我来说最困难的部分是弄清楚如何制作一个自包含的应用程序包,尤其是如何使用 Xcode 工具链 (10.3) 处理 macOS (Mojave) 上的 .dylib 地狱。在线资源在这个主题上非常不一致。许多教程提示我在这里和那里修复问题。然而,他们每个人都有一个稍微倾斜的部分,足以让我在一分钟后偏离正轨。但我很高兴事情比GNOME WIKI描述的要容易得多,Xcode 处理了很多繁重的工作。

以下是我根据他们的入门示例制作 hello-world GNOME 应用程序并使其在没有任何预安装依赖项的情况下在另一台 Mac 上运行的操作,并附有简短说明:

安装 GTK+

  • 安装GTK + 3及其Python从自制结合:brew install pygobject3 gtk+3;

设置Xcode项目并完成编码

  • 在 Xcode 中,使用 Objective-C 创建一个 Cocoa macOS 项目。
  • 编写您的 GTK+ 应用程序代码main.m(我实际上是main.mm为可能的 C++ 混合编写的)。而不是返回NSApplicationMain(). 你返回g_application_run().

  • 保持所有其他支持源文件的原样。

  • 设置一个适当的macOS Deployment Target:我macOS 10.10为了合理的兼容性而设置它。我的另一台测试机器运行 High Sierra。

这是我的main.mm.

//
//  main.mm
//  hello_gtk
//
//  Created by Me on 2019-08-11.
//  Copyright © 2019 Me. All rights reserved.
//

#include <iostream>
#import <Cocoa/Cocoa.h>
#include <gtk/gtk.h>


// callback function which is called when button is clicked
static void on_button_clicked(GtkButton *btn, gpointer data) {
    // change button label when it's clicked
    gtk_button_set_label(btn, "Hello World");
}


// callback function which is called when application is first started
static void on_app_activate(GApplication *app, gpointer data) {
    // create a new application window for the application
    // GtkApplication is sub-class of GApplication
    // downcast GApplication* to GtkApplication* with GTK_APPLICATION() macro
    GtkWidget *window = gtk_application_window_new(GTK_APPLICATION(app));
    // a simple push button
    GtkWidget *btn = gtk_button_new_with_label("Click Me!");
    // connect the event-handler for "clicked" signal of button
    g_signal_connect(btn, "clicked", G_CALLBACK(on_button_clicked), NULL);
    // add the button to the window
    gtk_container_add(GTK_CONTAINER(window), btn);
    // display the window
    gtk_widget_show_all(GTK_WIDGET(window));
}


int main(int argc, char *argv[]) {
    // create new GtkApplication with an unique application ID
    GtkApplication *app = gtk_application_new(
                                              "org.gtkmm.example.HelloApp",
                                              G_APPLICATION_FLAGS_NONE
                                              );
    // connect the event-handler for "activate" signal of GApplication
    // G_CALLBACK() macro is used to cast the callback function pointer
    // to generic void pointer
    g_signal_connect(app, "activate", G_CALLBACK(on_app_activate), NULL);
    // start the application, terminate by closing the window
    // GtkApplication* is upcast to GApplication* with G_APPLICATION() macro
    int status = g_application_run(G_APPLICATION(app), argc, argv);
    // deallocate the application object
    g_object_unref(app);
//    return status;
    return status;
}


Run Code Online (Sandbox Code Playgroud)

配置Xcode工程编译链接

在这里,您必须链接到 Homebrew GTK+。暂时不要做你的 .dylib 调整。

  • 设置编译器标志。了解标题搜索路径:pkg-config --cflags gtk+-3.0,并将结果添加到Other C FlagsXcode 目标的Build Settings.
  • 设置链接器标志。找出所需的标志:pkg-config --libs gtk+-3.0,并将结果添加到Other Linker Flags
  • 将示例所需的系统框架添加到Link Binary with Libraries构建阶段。就我而言:Carbon(!), Foundation, CoreGraphics, Cocoa.

修复 .dylibs 中的嵌入路径

这是一个经常讨论的话题。人们甚至制作了工具(包括 Jhbuild 和这个)来完成这项工作。不幸的是,这些工具或技巧中没有一个是开箱即用的。我的猜测是,业余博主很难跟上苹果的步伐,因为苹果有天赋贬低一年前发明的东西,而大师们正忙于更有趣和更重要的任务。所有的提示得到了理论虽然正确,所以我终于得到它遵循的思想工作这一项。这是我的看法:

  • Run Script在 之后添加一个构建阶段Link Binary with Libraries。我使用一个单独的脚本文件,只是sh +x ${PROJECT_DIR}/${PRODUCT_NAME}/deploy_libs.sh为了可维护性。

这是我写的实际脚本:

#! /bin/sh

LibTargetDir="${BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/lib"
Exec=${BUILD_DIR}/${EXECUTABLE_PATH}
RelLibDir="@executable_path/../Frameworks/lib"
pwd
mkdir -p "${LibTargetDir}" 2>&1 > /dev/null

#
# Copy Homebrew libs to hello_world.app/Contents/Frameworks/lib/
#

# Direct dependencies of the executable found out about by otool.

cp /usr/local/opt/gtk+3/lib/libgtk-3.0.dylib "${LibTargetDir}"
cp /usr/local/opt/gtk+3/lib/libgdk-3.0.dylib "${LibTargetDir}"
cp /usr/local/opt/pango/lib/libpangocairo-1.0.0.dylib "${LibTargetDir}"
cp /usr/local/opt/pango/lib/libpango-1.0.0.dylib "${LibTargetDir}"
cp /usr/local/opt/harfbuzz/lib/libharfbuzz.0.dylib "${LibTargetDir}"
cp /usr/local/opt/atk/lib/libatk-1.0.0.dylib "${LibTargetDir}"
cp /usr/local/opt/cairo/lib/libcairo-gobject.2.dylib "${LibTargetDir}"
cp /usr/local/opt/cairo/lib/libcairo.2.dylib "${LibTargetDir}"
cp /usr/local/opt/gdk-pixbuf/lib/libgdk_pixbuf-2.0.0.dylib "${LibTargetDir}"
cp /usr/local/opt/glib/lib/libgio-2.0.0.dylib "${LibTargetDir}"
cp /usr/local/opt/glib/lib/libgobject-2.0.0.dylib "${LibTargetDir}"
cp /usr/local/opt/glib/lib/libglib-2.0.0.dylib "${LibTargetDir}"
cp /usr/local/opt/gettext/lib/libintl.8.dylib "${LibTargetDir}"

# 2nd-order dependencies by the above libs.

cp /usr/local/opt/libepoxy/lib/libepoxy.0.dylib "${LibTargetDir}"
cp /usr/local/opt/fontconfig/lib/libfontconfig.1.dylib "${LibTargetDir}"
cp /usr/local/opt/freetype/lib/libfreetype.6.dylib "${LibTargetDir}"
cp /usr/local//Cellar/libffi/3.2.1/lib/libffi.6.dylib "${LibTargetDir}"
cp /usr/local/opt/fribidi/lib/libfribidi.0.dylib "${LibTargetDir}"
cp /usr/local/opt/glib/lib/libgmodule-2.0.0.dylib "${LibTargetDir}"
cp /usr/local/opt/graphite2/lib/libgraphite2.3.dylib "${LibTargetDir}"
cp /usr/local/Cellar/pango/1.44.5/lib/libpangoft2-1.0.0.dylib "${LibTargetDir}"
cp /usr/local/opt/pixman/lib/libpixman-1.0.dylib "${LibTargetDir}"
cp /usr/local/opt/libpng/lib/libpng16.16.dylib "${LibTargetDir}"


#
# Make them writable for the fixes. The libs are read-only fresh out of Homebrew .
#

chmod -R +w "${LibTargetDir}"/*


#
# Fix .dylib execution paths for the well-known reason: Paths are hardcoded.
#

# Fix executable dependencies.

install_name_tool -change "/usr/local/opt/gtk+3/lib/libgtk-3.0.dylib" "${RelLibDir}/libgtk-3.0.dylib" "${Exec}"
install_name_tool -change "/usr/local/opt/gtk+3/lib/libgdk-3.0.dylib" "${RelLibDir}/libgdk-3.0.dylib" "${Exec}"
install_name_tool -change "/usr/local/opt/pango/lib/libpangocairo-1.0.0.dylib" "${RelLibDir}/libpangocairo-1.0.0.dylib" "${Exec}"
install_name_tool -change "/usr/local/opt/pango/lib/libpango-1.0.0.dylib" "${RelLibDir}/libpango-1.0.0.dylib" "${Exec}"
install_name_tool -change "/usr/local/opt/harfbuzz/lib/libharfbuzz.0.dylib" "${RelLibDir}/libharfbuzz.0.dylib" "${Exec}"
install_name_tool -change "/usr/local/opt/atk/lib/libatk-1.0.0.dylib" "${RelLibDir}/libatk-1.0.0.dylib" "${Exec}"
install_name_tool -change "/usr/local/opt/cairo/lib/libcairo-gobject.2.dylib" "${RelLibDir}/libcairo-gobject.2.dylib" "${Exec}"
install_name_tool -change "/usr/local/opt/cairo/lib/libcairo.2.dylib" "${RelLibDir}/libcairo.2.dylib" "${Exec}"
install_name_tool -change "/usr/local/opt/gdk-pixbuf/lib/libgdk_pixbuf-2.0.0.dylib" "${RelLibDir}/libgdk_pixbuf-2.0.0.dylib" "${Exec}"
install_name_tool -change "/usr/local/opt/glib/lib/libgio-2.0.0.dylib" "${RelLibDir}/libgio-2.0.0.dylib" "${Exec}"
install_name_tool -change "/usr/local/opt/glib/lib/libgobject-2.0.0.dylib" "${RelLibDir}/libgobject-2.0.0.dylib" "${Exec}"
install_name_tool -change "/usr/local/opt/glib/lib/libglib-2.0.0.dylib" "${RelLibDir}/libglib-2.0.0.dylib" "${Exec}"
install_name_tool -change "/usr/local/opt/gettext/lib/libintl.8.dylib" "${RelLibDir}/libintl.8.dylib" "${Exec}"

# Fix dependencies of dependencies

install_name_tool -change "/usr/local/Cellar/gtk+3/3.24.10/lib/libgdk-3.0.dylib" "${RelLibDir}/libgdk-3.0.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libgmodule-2.0.0.dylib" "${RelLibDir}/libgmodule-2.0.0.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libglib-2.0.0.dylib" "${RelLibDir}/libglib-2.0.0.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/gettext/lib/libintl.8.dylib" "${RelLibDir}/libintl.8.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libgobject-2.0.0.dylib" "${RelLibDir}/libgobject-2.0.0.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libgio-2.0.0.dylib" "${RelLibDir}/libgio-2.0.0.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/pango/lib/libpangocairo-1.0.0.dylib" "${RelLibDir}/libpangocairo-1.0.0.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/pango/lib/libpango-1.0.0.dylib" "${RelLibDir}/libpango-1.0.0.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/harfbuzz/lib/libharfbuzz.0.dylib" "${RelLibDir}/libharfbuzz.0.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/cairo/lib/libcairo.2.dylib" "${RelLibDir}/libcairo.2.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/pango/lib/libpangoft2-1.0.0.dylib" "${RelLibDir}/libpangoft2-1.0.0.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/freetype/lib/libfreetype.6.dylib" "${RelLibDir}/libfreetype.6.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/fribidi/lib/libfribidi.0.dylib" "${RelLibDir}/libfribidi.0.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/cairo/lib/libcairo-gobject.2.dylib" "${RelLibDir}/libcairo-gobject.2.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/gdk-pixbuf/lib/libgdk_pixbuf-2.0.0.dylib" "${RelLibDir}/libgdk_pixbuf-2.0.0.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/atk/lib/libatk-1.0.0.dylib" "${RelLibDir}/libatk-1.0.0.dylib" "${LibTargetDir}"/libgtk-3.0.dylib
install_name_tool -change "/usr/local/opt/libepoxy/lib/libepoxy.0.dylib" "${RelLibDir}/libepoxy.0.dylib" "${LibTargetDir}"/libgtk-3.0.dylib


install_name_tool -change "/usr/local/opt/gdk-pixbuf/lib/libgdk_pixbuf-2.0.0.dylib" "${RelLibDir}/libgdk_pixbuf-2.0.0.dylib" "${LibTargetDir}"/libgdk-3.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libgobject-2.0.0.dylib" "${RelLibDir}/libgobject-2.0.0.dylib" "${LibTargetDir}"/libgdk-3.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libglib-2.0.0.dylib" "${RelLibDir}/libglib-2.0.0.dylib" "${LibTargetDir}"/libgdk-3.0.dylib
install_name_tool -change "/usr/local/opt/gettext/lib/libintl.8.dylib" "${RelLibDir}/libintl.8.dylib" "${LibTargetDir}"/libgdk-3.0.dylib
install_name_tool -change "/usr/local/opt/cairo/lib/libcairo-gobject.2.dylib" "${RelLibDir}/libcairo-gobject.2.dylib" "${LibTargetDir}"/libgdk-3.0.dylib
install_name_tool -change "/usr/local/opt/pango/lib/libpango-1.0.0.dylib" "${RelLibDir}/libpango-1.0.0.dylib" "${LibTargetDir}"/libgdk-3.0.dylib
install_name_tool -change "/usr/local/opt/fribidi/lib/libfribidi.0.dylib" "${RelLibDir}/libfribidi.0.dylib" "${LibTargetDir}"/libgdk-3.0.dylib
install_name_tool -change "/usr/local/opt/cairo/lib/libcairo-gobject.2.dylib" "${RelLibDir}/libcairo-gobject.2.dylib" "${LibTargetDir}"/libgdk-3.0.dylib
install_name_tool -change "/usr/local/opt/libepoxy/lib/libepoxy.0.dylib" "${RelLibDir}/libepoxy.0.dylib" "${LibTargetDir}"/libgdk-3.0.dylib
install_name_tool -change "/usr/local/opt/pango/lib/libpangocairo-1.0.0.dylib" "${RelLibDir}/libpangocairo-1.0.0.dylib" "${LibTargetDir}"/libgdk-3.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libgio-2.0.0.dylib" "${RelLibDir}/libgio-2.0.0.dylib" "${LibTargetDir}"/libgdk-3.0.dylib


install_name_tool -change "/usr/local/Cellar/pango/1.44.5/lib/libpango-1.0.0.dylib" "${RelLibDir}/libpango-1.0.0.dylib" "${LibTargetDir}"/libpangocairo-1.0.0.dylib
install_name_tool -change "/usr/local/Cellar/pango/1.44.5/lib/libpangoft2-1.0.0.dylib" "${RelLibDir}/libpangoft2-1.0.0.dylib" "${LibTargetDir}"/libpangocairo-1.0.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libglib-2.0.0.dylib" "${RelLibDir}/libglib-2.0.0.dylib" "${LibTargetDir}"/libpangocairo-1.0.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libgobject-2.0.0.dylib" "${RelLibDir}/libgobject-2.0.0.dylib" "${LibTargetDir}"/libpangocairo-1.0.0.dylib
install_name_tool -change "/usr/local/opt/harfbuzz/lib/libharfbuzz.0.dylib" "${RelLibDir}/libharfbuzz.0.dylib" "${LibTargetDir}"/libpangocairo-1.0.0.dylib
install_name_tool -change "/usr/local/opt/fontconfig/lib/libfontconfig.1.dylib" "${RelLibDir}/libfontconfig.1.dylib" "${LibTargetDir}"/libpangocairo-1.0.0.dylib
install_name_tool -change "/usr/local/opt/cairo/lib/libcairo.2.dylib" "${RelLibDir}/libcairo.2.dylib" "${LibTargetDir}"/libpangocairo-1.0.0.dylib


install_name_tool -change "/usr/local/opt/glib/lib/libglib-2.0.0.dylib" "${RelLibDir}/libglib-2.0.0.dylib" "${LibTargetDir}"/libpango-1.0.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libgobject-2.0.0.dylib" "${RelLibDir}/libgobject-2.0.0.dylib" "${LibTargetDir}"/libpango-1.0.0.dylib
install_name_tool -change "/usr/local/opt/fribidi/lib/libfribidi.0.dylib" "${RelLibDir}/libfribidi.0.dylib" "${LibTargetDir}"/libpango-1.0.0.dylib
install_name_tool -change "/usr/local/opt/harfbuzz/lib/libharfbuzz.0.dylib" "${RelLibDir}/libharfbuzz.0.dylib" "${LibTargetDir}"/libpango-1.0.0.dylib


install_name_tool -change "/usr/local/opt/harfbuzz/lib/libharfbuzz.0.dylib" "${RelLibDir}/libharfbuzz.0.dylib" "${LibTargetDir}"/libharfbuzz.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libglib-2.0.0.dylib" "${RelLibDir}/libglib-2.0.0.dylib" "${LibTargetDir}"/libharfbuzz.0.dylib
install_name_tool -change "/usr/local/opt/gettext/lib/libintl.8.dylib" "${RelLibDir}/libintl.8.dylib" "${LibTargetDir}"/libharfbuzz.0.dylib
install_name_tool -change "/usr/local/opt/freetype/lib/libfreetype.6.dylib" "${RelLibDir}/libfreetype.6.dylib" "${LibTargetDir}"/libharfbuzz.0.dylib
install_name_tool -change "/usr/local/opt/graphite2/lib/libgraphite2.3.dylib" "${RelLibDir}/libgraphite2.3.dylib" "${LibTargetDir}"/libharfbuzz.0.dylib


install_name_tool -change "/usr/local/opt/glib/lib/libglib-2.0.0.dylib" "${RelLibDir}/libglib-2.0.0.dylib" "${LibTargetDir}"/libatk-1.0.0.dylib
install_name_tool -change "/usr/local/opt/gettext/lib/libintl.8.dylib" "${RelLibDir}/libintl.8.dylib"${LibTargetDir}/libatk-1.0.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libgobject-2.0.0.dylib" "${RelLibDir}/libgobject-2.0.0.dylib" "${LibTargetDir}"/libatk-1.0.0.dylib


install_name_tool -change "/usr/local/opt/cairo/lib/libcairo.2.dylib" "${RelLibDir}/libcairo.2.dylib" "${LibTargetDir}"/libcairo-gobject.2.dylib
install_name_tool -change "/usr/local/opt/pixman/lib/libpixman-1.0.dylib" "${RelLibDir}/libpixman-1.0.dylib" "${LibTargetDir}"/libcairo-gobject.2.dylib
install_name_tool -change "/usr/local/opt/fontconfig/lib/libfontconfig.1.dylib" "${RelLibDir}/libfontconfig.1.dylib" "${LibTargetDir}"/libcairo-gobject.2.dylib
install_name_tool -change "/usr/local/opt/freetype/lib/libfreetype.6.dylib" "${RelLibDir}/libfreetype.6.dylib" "${LibTargetDir}"/libcairo-gobject.2.dylib
install_name_tool -change "/usr/local/opt/libpng/lib/libpng16.16.dylib" "${RelLibDir}/libpng16.16.dylib" "${LibTargetDir}"/libcairo-gobject.2.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libgobject-2.0.0.dylib" "${RelLibDir}/libgobject-2.0.0.dylib" "${LibTargetDir}"/libcairo-gobject.2.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libglib-2.0.0.dylib" "${RelLibDir}/libglib-2.0.0.dylib" "${LibTargetDir}"/libcairo-gobject.2.dylib
install_name_tool -change "/usr/local/opt/gettext/lib/libintl.8.dylib" "${RelLibDir}/libintl.8.dylib" "${LibTargetDir}"/libcairo-gobject.2.dylib


install_name_tool -change "/usr/local/opt/pixman/lib/libpixman-1.0.dylib" "${RelLibDir}/libpixman-1.0.dylib" "${LibTargetDir}"/libcairo.2.dylib
install_name_tool -change "/usr/local/opt/fontconfig/lib/libfontconfig.1.dylib" "${RelLibDir}/libfontconfig.1.dylib" "${LibTargetDir}"/libcairo.2.dylib
install_name_tool -change "/usr/local/opt/freetype/lib/libfreetype.6.dylib" "${RelLibDir}/libfreetype.6.dylib" "${LibTargetDir}"/libcairo.2.dylib
install_name_tool -change "/usr/local/opt/libpng/lib/libpng16.16.dylib" "${RelLibDir}/libpng16.16.dylib" "${LibTargetDir}"/libcairo.2.dylib


install_name_tool -change "/usr/local/opt/glib/lib/libgobject-2.0.0.dylib" "${RelLibDir}/libgobject-2.0.0.dylib" "${LibTargetDir}"/libgdk_pixbuf-2.0.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libglib-2.0.0.dylib" "${RelLibDir}/libglib-2.0.0.dylib" "${LibTargetDir}"/libgdk_pixbuf-2.0.0.dylib
install_name_tool -change "/usr/local/opt/gettext/lib/libintl.8.dylib" "${RelLibDir}/libintl.8.dylib" "${LibTargetDir}"/libgdk_pixbuf-2.0.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libgmodule-2.0.0.dylib" "${RelLibDir}/libgmodule-2.0.0.dylib" "${LibTargetDir}"/libgdk_pixbuf-2.0.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libgio-2.0.0.dylib" "${RelLibDir}/libgio-2.0.0.dylib" "${LibTargetDir}"/libgdk_pixbuf-2.0.0.dylib


install_name_tool -change "/usr/local/opt/glib/lib/libglib-2.0.0.dylib" "${RelLibDir}/libglib-2.0.0.dylib" "${LibTargetDir}"/libgobject-2.0.0.dylib
install_name_tool -change "/usr/local/opt/libffi/lib/libffi.6.dylib" "${RelLibDir}/libffi.6.dylib" "${LibTargetDir}"/libgobject-2.0.0.dylib


install_name_tool -change "/usr/local/opt/pcre/lib/libpcre.1.dylib" "${RelLibDir}/libpcre.1.dylib" "${LibTargetDir}"/libglib-2.0.0.dylib
install_name_tool -change "/usr/local/opt/gettext/lib/libintl.8.dylib" "${RelLibDir}/libintl.8.dylib" "${LibTargetDir}"/libglib-2.0.0.dylib


install_name_tool -change "/usr/local/Cellar/glib/2.60.6/lib/libglib-2.0.0.dylib" "${RelLibDir}/libglib-2.0.0.dylib" "${LibTargetDir}"/libgmodule-2.0.0.dylib


install_name_tool -change "/usr/local/Cellar/glib/2.60.6/lib/libgobject-2.0.0.dylib" "${RelLibDir}/libgobject-2.0.0.dylib" "${LibTargetDir}"/libgio-2.0.0.dylib
install_name_tool -change "/usr/local/Cellar/glib/2.60.6/lib/libglib-2.0.0.dylib" "${RelLibDir}/libglib-2.0.0.dylib" "${LibTargetDir}"/libgio-2.0.0.dylib
install_name_tool -change "/usr/local/opt/gettext/lib/libintl.8.dylib" "${RelLibDir}/libintl.8.dylib" "${LibTargetDir}"/libgio-2.0.0.dylib
install_name_tool -change "/usr/local/Cellar/glib/2.60.6/lib/libgmodule-2.0.0.dylib" "${RelLibDir}/libgmodule-2.0.0.dylib" "${LibTargetDir}"/libgio-2.0.0.dylib


install_name_tool -change "/usr/local/opt/harfbuzz/lib/libharfbuzz.0.dylib" "${RelLibDir}/libharfbuzz.0.dylib" "${LibTargetDir}"/libpangoft2-1.0.0.dylib
install_name_tool -change "/usr/local/Cellar/pango/1.44.5/lib/libpango-1.0.0.dylib" "${RelLibDir}/libpango-1.0.0.dylib" "${LibTargetDir}"/libpangoft2-1.0.0.dylib
install_name_tool -change "/usr/local/opt/glib/lib/libglib-2.0.0.dylib" "${RelLibDir}/libglib-2.0.0.dylib" "${LibTargetDir}"/libpangoft2-1.0.0.dylib
install_name_tool -change "/usr/local/opt/gettext/lib/libintl.8.dylib" "${RelLibDir}/libintl.8.dylib" "${LibTargetDir}"/libpangoft2-1.0.0.dylib
install_name_tool -change "/usr/local/opt/freetype/lib/libfreetype.6.dylib" "${RelLibDir}/libfreetype.6.dylib" "${LibTargetDir}"/l