Commit b5df356c09a07280124103914ca9e9c08afdff13
1 parent
3d70bc09
Exists in
develop
Removing macos path due to conflicts with the branch with the same name.
Showing
6 changed files
with
311 additions
and
311 deletions
Show diff stats
... | ... | @@ -0,0 +1,20 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
3 | +<plist version="1.0"> | |
4 | +<dict> | |
5 | + <key>CFBundleExecutable</key> | |
6 | + <string>launcher.sh</string> | |
7 | + <key>CFBundleName</key> | |
8 | + <string>pw3270</string> | |
9 | + <key>CFBundleDisplayName</key> | |
10 | + <string>pw3270</string> | |
11 | + <key>CFBundleIconFile</key> | |
12 | + <string>pw3270.icns</string> | |
13 | + <key>CFBundleIdentifier</key> | |
14 | + <string>br.app.pw3270</string> | |
15 | + <key>NSHighResolutionCapable</key> | |
16 | + <true/> | |
17 | + <key>LSMinimumSystemVersion</key> | |
18 | + <string>10.13.6</string> | |
19 | +</dict> | |
20 | +</plist> | ... | ... |
... | ... | @@ -0,0 +1,226 @@ |
1 | +#!/usr/bin/env bash | |
2 | +#@author André Breves <andre.breves@gmail.com> | |
3 | +set -Eeuo pipefail | |
4 | + | |
5 | +check_dependencies() { | |
6 | + local unavailable=() | |
7 | + for dependency in "${@:-$(</dev/stdin)}"; do | |
8 | + if [[ ! -x "$(command -v "${dependency}")" ]]; then unavailable+=("${dependency}"); fi | |
9 | + done | |
10 | + if [[ ${#unavailable[@]} == 1 ]]; then | |
11 | + echo "Dependency '${unavailable[*]}' not found." | |
12 | + exit 1 | |
13 | + elif [[ ${#unavailable[@]} -gt 1 ]]; then | |
14 | + error "Dependencies '${unavailable[*]}' not found." | |
15 | + exit 1 | |
16 | + fi | |
17 | +} | |
18 | + | |
19 | +find_lib() { | |
20 | + # https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/UsingDynamicLibraries.html | |
21 | + local libs_path="${HOME}/lib $(brew --prefix)/lib /usr/lib" | |
22 | + for lib in "${@:-$(</dev/stdin)}"; do | |
23 | + local found="" | |
24 | + if [[ -f "${lib}" ]]; then | |
25 | + found="$(greadlink -m "${lib}")" | |
26 | + else | |
27 | + for path in ${libs_path}; do | |
28 | + if [[ -f "${path}/${lib}" ]]; then | |
29 | + found="$(greadlink -m "${path}/${lib}")" | |
30 | + break | |
31 | + fi | |
32 | + done | |
33 | + fi | |
34 | + if [[ "${found}" != "" ]]; then | |
35 | + echo "${found}" | |
36 | + else | |
37 | + echo >&2 "Lib ${lib} not found" | |
38 | + exit 1 | |
39 | + fi | |
40 | + done | |
41 | +} | |
42 | + | |
43 | +bundle_cp() { | |
44 | + local system_libs='^(/System/.*|/usr/lib/.*)$' | |
45 | + | |
46 | + for source in "${@:-$(</dev/stdin)}"; do | |
47 | + source="$(greadlink -m "${source}")" | |
48 | + | |
49 | + if [[ "${source}" =~ ${system_libs} ]]; then continue; fi | |
50 | + | |
51 | + if [[ ! -f "${source}" ]]; then | |
52 | + echo >&2 "File \"${source}\" not found" | |
53 | + exit 1 | |
54 | + fi | |
55 | + | |
56 | + local id="" | |
57 | + local target="" | |
58 | + local file_type | |
59 | + file_type="$(file -b "${source}")" | |
60 | + case "${file_type}" in | |
61 | + *executable*) | |
62 | + target="$(greadlink -m "${exe_path}/$(basename "${source}")")";; | |
63 | + *) | |
64 | + id="@rpath/$(basename "${source}")" | |
65 | + target="$(greadlink -m "${lib_path}/$(basename "${source}")")";; | |
66 | + esac | |
67 | + | |
68 | + if [[ "${id}" != "" ]]; then echo "${id}"; fi | |
69 | + | |
70 | + if [[ -f "${target}" ]]; then continue; fi | |
71 | + | |
72 | + mkdir -p "$(dirname "${target}")" | |
73 | + cp "${source}" "${target}" | |
74 | + chmod u+w "${target}" | |
75 | + | |
76 | + if [[ "${id}" != "" ]]; then install_name_tool -id "${id}" "${target}" 2> /dev/null; fi | |
77 | + install_name_tool -add_rpath "@executable_path/../Frameworks" "${target}" 2> /dev/null | |
78 | + | |
79 | + for old_install_name in $(otool -L "${target}" | grep '^\t' | cut -c 2- | sed -n "s/\(.*\) (.*)/\1/p"); do | |
80 | + if [[ "${old_install_name}" == "${id}" ]]; then continue; fi | |
81 | + if [[ "${old_install_name}" =~ ${system_libs} ]]; then continue; fi | |
82 | + local lib | |
83 | + if [[ "${old_install_name}" =~ ^@loader_path.* ]]; then | |
84 | + lib="$(find_lib "$(dirname "${source}")/${old_install_name//@loader_path/}")" | |
85 | + else | |
86 | + lib="$(find_lib "${old_install_name}")" | |
87 | + fi | |
88 | + local new_install_name="$(bundle_cp "${lib}")" | |
89 | + if [[ "${new_install_name}" != "" ]]; then | |
90 | + install_name_tool -change "${old_install_name}" "${new_install_name}" "${target}" 2> /dev/null | |
91 | + fi | |
92 | + done | |
93 | + # https://stackoverflow.com/a/71753248/6910609 | |
94 | + codesign --force -s - "${target}" 2> /dev/null | |
95 | + echo >&2 "${target}" | |
96 | + done | |
97 | +} | |
98 | + | |
99 | +bundle_cache() { | |
100 | + local awaiting_file=1; | |
101 | + while IFS= read -r line; do | |
102 | + if (( awaiting_file )); then | |
103 | + if [[ ! "${line}" =~ ^"#" && "${line}" != "" ]]; then | |
104 | + line="${line##\ }" | |
105 | + line="${line#\"}" | |
106 | + line="${line%%\ }" | |
107 | + line="${line%\"}" | |
108 | + line="\"$(bundle_cp "${line}")\"" | |
109 | + awaiting_file=0 | |
110 | + fi | |
111 | + else | |
112 | + if [[ "${line}" == "" ]]; then | |
113 | + awaiting_file=1 | |
114 | + fi | |
115 | + fi | |
116 | + printf '%s\n' "${line}" | |
117 | + done | |
118 | +} | |
119 | + | |
120 | +# Check dependencies | |
121 | +check_dependencies otool grep cut sed greadlink qlmanage sips iconutil | |
122 | + | |
123 | +# Creates temporary directory | |
124 | +echo "* Creating temporary directory" | |
125 | +tmp="$(mktemp -d)" | |
126 | +trap 'echo "* Removing temporary directory \"${tmp}\""; rm -rf "${tmp}"' EXIT | |
127 | + | |
128 | +bundle="pw3270.app" | |
129 | +bundle_path="${bundle}/Contents" | |
130 | +exe_path="${bundle_path}/MacOS" | |
131 | +lib_path="${bundle_path}/Frameworks" | |
132 | +res_path="${bundle_path}/Resources" | |
133 | + | |
134 | +rm -fr "${bundle}" | |
135 | + | |
136 | +mkdir -p "${bundle_path}" | |
137 | +cp "Info.plist" "${bundle_path}" | |
138 | + | |
139 | +mkdir -p "${res_path}" | |
140 | +cp -r "../ui/macos.ui.xml" "${res_path}/pw3270.ui.xml" | |
141 | +cp -r "$(brew --prefix)/share/pw3270/remap" "${res_path}" | |
142 | +cp "$(brew --prefix)/share/pw3270/colors.conf" "${res_path}" | |
143 | + | |
144 | +# Bundle GLib schemas | |
145 | +echo "* Bundling GLib schemas" | |
146 | +mkdir -p "${tmp}/schemas" | |
147 | +cp "../schemas/"*".gschema.xml" "${tmp}/schemas" | |
148 | +cp "$(pkg-config gtk+-3.0 --variable=prefix)/share/glib-2.0/schemas/org.gtk.Settings."*".gschema.xml" "${tmp}/schemas" | |
149 | +glib-compile-schemas --targetdir="${res_path}" "${tmp}/schemas" | |
150 | + | |
151 | +# Create the GTK settings file | |
152 | +# https://developer.gnome.org/gtk3/stable/GtkSettings.html | |
153 | +mkdir -p "${res_path}/gtk-3.0" | |
154 | +cat > "${res_path}/gtk-3.0/settings.ini" << EOF | |
155 | +[Settings] | |
156 | +gtk-theme-name=Adwaita | |
157 | +gtk-print-preview-command="open -b com.apple.Preview %f" | |
158 | +EOF | |
159 | + | |
160 | +# Make icon bundle | |
161 | +echo "* Creating app icon bundle" | |
162 | +iconset="${tmp}/pw3270.iconset" | |
163 | +rm -fr "${iconset}" | |
164 | +mkdir -p "${iconset}" | |
165 | +icon_sizes=("16" "32" "64" "128" "256" "512" "1024") | |
166 | +for ((i=1; i < ${#icon_sizes[*]}; i++)); do | |
167 | + size=${icon_sizes[$((i - 1))]} | |
168 | + convert -density "${size}" -resize "${size}x" -background transparent "../branding/pw3270.svg" "${iconset}/icon_${size}x${size}.png" | |
169 | + | |
170 | + size2x=${icon_sizes[${i}]} | |
171 | + convert -density "${size2x}" -resize "${size2x}x" -background transparent "../branding/pw3270.svg" "${iconset}/icon_${size}x${size}@2x.png" | |
172 | +done | |
173 | +iconutil -c icns -o "${res_path}/pw3270.icns" "${iconset}" | |
174 | + | |
175 | + | |
176 | +# Copy icons | |
177 | +echo "* Copying icons" | |
178 | +mkdir -p "${res_path}/icons" | |
179 | +cp -r "$(brew --prefix adwaita-icon-theme)/share/icons/" "${res_path}/icons" | |
180 | +cp -r "$(brew --prefix hicolor-icon-theme)/share/icons/" "${res_path}/icons" | |
181 | +mogrify -format png -path "${res_path}" -background transparent "../branding/*.svg" | |
182 | + | |
183 | +# Copy themes | |
184 | +echo "* Copying themes" | |
185 | +mkdir -p "${res_path}/themes" | |
186 | +cp -a "$(brew --prefix gtk+3)/share/themes/Mac" "${res_path}/themes" | |
187 | + | |
188 | +# Copy mime database | |
189 | +echo "* Copying mime database" | |
190 | +mkdir -p "${res_path}/mime" | |
191 | +cp "$(pkg-config shared-mime-info --variable=prefix)/share/mime/mime.cache" "${res_path}/mime" | |
192 | + | |
193 | +# Copy executables | |
194 | +echo "* Copying executables" | |
195 | +mkdir -p "${exe_path}" | |
196 | +bundle_cp "../.bin/Release/pw3270" | |
197 | +cp "launcher.sh" "${exe_path}" | |
198 | + | |
199 | +# Bundle GdkPixbuf Image Loader Modules | |
200 | +echo "* Bundling GdkPixbuf Image Loader Modules" | |
201 | +gdk-pixbuf-query-loaders | bundle_cache > "${res_path}/gdk-loaders.cache" | |
202 | + | |
203 | +# Bundle GTK+ Input Method Modules | |
204 | +echo "* Bundling GTK+ Input Method Modules" | |
205 | +gtk_prefix="$(pkg-config gtk+-3.0 --variable prefix)" | |
206 | +gtk-query-immodules-3.0 | bundle_cache \ | |
207 | + | sed "s|${gtk_prefix}/share/locale|@executable_path/../Resources/locale|g" \ | |
208 | + > "${res_path}/gtk.immodules" | |
209 | + | |
210 | +# Bundle print backends | |
211 | +echo "* Bundling print backends" | |
212 | +mkdir -p "${lib_path}/printbackends" | |
213 | +for backend in "$(pkg-config gtk+-3.0 --variable=prefix)/lib/gtk-3.0/$(pkg-config gtk+-3.0 --variable=gtk_binary_version)/printbackends/"*.so; do | |
214 | + bundle_cp "${backend}" | |
215 | + # TODO: update bundle_cp to inform destiny dir | |
216 | + mv "${lib_path}/$(basename "${backend}")" "${lib_path}/printbackends" | |
217 | +done | |
218 | + | |
219 | +# TODO: gerar o Info.plist com a versão do macOS $(sw_vers -productVersion) | |
220 | + | |
221 | +# Bundle locale | |
222 | +echo "* Bundling locale" | |
223 | +mkdir -p "${res_path}/locale" | |
224 | +cp -r "../.bin/locale/" "${res_path}/locale" | |
225 | +cp "$(brew --prefix)/share/locale/pt_BR/LC_MESSAGES/lib3270"*".mo" "${res_path}/locale/pt_BR/LC_MESSAGES" | |
226 | +cp "$(brew --prefix)/share/locale/pt_BR/LC_MESSAGES/libv3270"*".mo" "${res_path}/locale/pt_BR/LC_MESSAGES" | ... | ... |
... | ... | @@ -0,0 +1,65 @@ |
1 | +#!/usr/bin/env sh | |
2 | +#@author André Breves <andre.breves@gmail.com> | |
3 | +set -euo | |
4 | + | |
5 | +cd "${0%/*}" | |
6 | +executable_path="${PWD}" | |
7 | +cd .. | |
8 | +contents_path="${PWD}" | |
9 | +cd Resources | |
10 | +resource_path="${PWD}" | |
11 | + | |
12 | +info_plist="${contents_path}/Info.plist" | |
13 | +bundle_identifier=$(plutil -extract "CFBundleIdentifier" xml1 -o - "${info_plist}" | sed -n "s/.*<string>\(.*\)<\/string>.*/\1/p") | |
14 | + | |
15 | +# XDG Base Directory Specification | |
16 | +# https://specifications.freedesktop.org/basedir-spec/latest/ar01s03.html | |
17 | + | |
18 | +# Defines the base directory relative to which user specific configuration files should be stored | |
19 | +export XDG_CONFIG_HOME="${HOME}/Library/Application Support/${bundle_identifier}" | |
20 | + | |
21 | +# Defines the base directory relative to which user specific data files should be stored | |
22 | +export XDG_DATA_HOME="${HOME}/Library/Application Support/${bundle_identifier}" | |
23 | + | |
24 | +# Defines the preference-ordered set of base directories to search for data files in addition to the $XDG_DATA_HOME base directory | |
25 | +export XDG_DATA_DIRS="${resource_path}" | |
26 | + | |
27 | +# Defines the preference-ordered set of base directories to search for configuration files in addition to the $XDG_CONFIG_HOME base directory | |
28 | +export XDG_CONFIG_DIRS="${resource_path}" | |
29 | + | |
30 | +# Defines the base directory relative to which user specific non-essential data files should be stored | |
31 | +export XDG_CACHE_HOME="${HOME}/Library/Caches/${bundle_identifier}" | |
32 | + | |
33 | + | |
34 | +# Running GTK+ Applications | |
35 | +# https://developer.gnome.org/gtk3/stable/gtk-running.html | |
36 | + | |
37 | +# If set, makes GTK+ use $GTK_DATA_PREFIX instead of the prefix configured when GTK+ was compiled | |
38 | +export GTK_DATA_PREFIX="${resource_path}" | |
39 | + | |
40 | +# Specifies the file listing the Input Method modules to load | |
41 | +export GTK_IM_MODULE_FILE="${resource_path}/gtk.immodules" | |
42 | + | |
43 | +# Specifies the file listing the GdkPixbuf loader modules to load | |
44 | +export GDK_PIXBUF_MODULE_FILE="${resource_path}/gdk-loaders.cache" | |
45 | + | |
46 | +# Specifies a list of directories to search when GTK+ is looking for dynamically loaded objects such as the modules | |
47 | +# specified by GTK_MODULES, theme engines, input method modules, file system backends and print backends. | |
48 | +export GTK_PATH="${contents_path}/Frameworks" | |
49 | + | |
50 | +# Running GIO applications | |
51 | +# https://developer.gnome.org/gio/stable/running-gio-apps.html | |
52 | + | |
53 | +# This variable can be set to the names of directories to consider when looking for compiled schemas for GSettings | |
54 | +export GSETTINGS_SCHEMA_DIR="${resource_path}" | |
55 | + | |
56 | +# export LANG="pt_BR" | |
57 | +# export LC_MESSAGES="pt_BR" | |
58 | +# export LC_ALL="pt_BR" | |
59 | + | |
60 | +mkdir -p "${XDG_CONFIG_HOME}" | |
61 | +mkdir -p "${XDG_DATA_HOME}" | |
62 | +mkdir -p "${XDG_CACHE_HOME}" | |
63 | + | |
64 | +cd "${resource_path}" | |
65 | +exec "${executable_path}/pw3270" | ... | ... |
macos/Info.plist
... | ... | @@ -1,20 +0,0 @@ |
1 | -<?xml version="1.0" encoding="UTF-8"?> | |
2 | -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
3 | -<plist version="1.0"> | |
4 | -<dict> | |
5 | - <key>CFBundleExecutable</key> | |
6 | - <string>launcher.sh</string> | |
7 | - <key>CFBundleName</key> | |
8 | - <string>pw3270</string> | |
9 | - <key>CFBundleDisplayName</key> | |
10 | - <string>pw3270</string> | |
11 | - <key>CFBundleIconFile</key> | |
12 | - <string>pw3270.icns</string> | |
13 | - <key>CFBundleIdentifier</key> | |
14 | - <string>br.app.pw3270</string> | |
15 | - <key>NSHighResolutionCapable</key> | |
16 | - <true/> | |
17 | - <key>LSMinimumSystemVersion</key> | |
18 | - <string>10.13.6</string> | |
19 | -</dict> | |
20 | -</plist> |
macos/bundle
... | ... | @@ -1,226 +0,0 @@ |
1 | -#!/usr/bin/env bash | |
2 | -#@author André Breves <andre.breves@gmail.com> | |
3 | -set -Eeuo pipefail | |
4 | - | |
5 | -check_dependencies() { | |
6 | - local unavailable=() | |
7 | - for dependency in "${@:-$(</dev/stdin)}"; do | |
8 | - if [[ ! -x "$(command -v "${dependency}")" ]]; then unavailable+=("${dependency}"); fi | |
9 | - done | |
10 | - if [[ ${#unavailable[@]} == 1 ]]; then | |
11 | - echo "Dependency '${unavailable[*]}' not found." | |
12 | - exit 1 | |
13 | - elif [[ ${#unavailable[@]} -gt 1 ]]; then | |
14 | - error "Dependencies '${unavailable[*]}' not found." | |
15 | - exit 1 | |
16 | - fi | |
17 | -} | |
18 | - | |
19 | -find_lib() { | |
20 | - # https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/UsingDynamicLibraries.html | |
21 | - local libs_path="${HOME}/lib $(brew --prefix)/lib /usr/lib" | |
22 | - for lib in "${@:-$(</dev/stdin)}"; do | |
23 | - local found="" | |
24 | - if [[ -f "${lib}" ]]; then | |
25 | - found="$(greadlink -m "${lib}")" | |
26 | - else | |
27 | - for path in ${libs_path}; do | |
28 | - if [[ -f "${path}/${lib}" ]]; then | |
29 | - found="$(greadlink -m "${path}/${lib}")" | |
30 | - break | |
31 | - fi | |
32 | - done | |
33 | - fi | |
34 | - if [[ "${found}" != "" ]]; then | |
35 | - echo "${found}" | |
36 | - else | |
37 | - echo >&2 "Lib ${lib} not found" | |
38 | - exit 1 | |
39 | - fi | |
40 | - done | |
41 | -} | |
42 | - | |
43 | -bundle_cp() { | |
44 | - local system_libs='^(/System/.*|/usr/lib/.*)$' | |
45 | - | |
46 | - for source in "${@:-$(</dev/stdin)}"; do | |
47 | - source="$(greadlink -m "${source}")" | |
48 | - | |
49 | - if [[ "${source}" =~ ${system_libs} ]]; then continue; fi | |
50 | - | |
51 | - if [[ ! -f "${source}" ]]; then | |
52 | - echo >&2 "File \"${source}\" not found" | |
53 | - exit 1 | |
54 | - fi | |
55 | - | |
56 | - local id="" | |
57 | - local target="" | |
58 | - local file_type | |
59 | - file_type="$(file -b "${source}")" | |
60 | - case "${file_type}" in | |
61 | - *executable*) | |
62 | - target="$(greadlink -m "${exe_path}/$(basename "${source}")")";; | |
63 | - *) | |
64 | - id="@rpath/$(basename "${source}")" | |
65 | - target="$(greadlink -m "${lib_path}/$(basename "${source}")")";; | |
66 | - esac | |
67 | - | |
68 | - if [[ "${id}" != "" ]]; then echo "${id}"; fi | |
69 | - | |
70 | - if [[ -f "${target}" ]]; then continue; fi | |
71 | - | |
72 | - mkdir -p "$(dirname "${target}")" | |
73 | - cp "${source}" "${target}" | |
74 | - chmod u+w "${target}" | |
75 | - | |
76 | - if [[ "${id}" != "" ]]; then install_name_tool -id "${id}" "${target}" 2> /dev/null; fi | |
77 | - install_name_tool -add_rpath "@executable_path/../Frameworks" "${target}" 2> /dev/null | |
78 | - | |
79 | - for old_install_name in $(otool -L "${target}" | grep '^\t' | cut -c 2- | sed -n "s/\(.*\) (.*)/\1/p"); do | |
80 | - if [[ "${old_install_name}" == "${id}" ]]; then continue; fi | |
81 | - if [[ "${old_install_name}" =~ ${system_libs} ]]; then continue; fi | |
82 | - local lib | |
83 | - if [[ "${old_install_name}" =~ ^@loader_path.* ]]; then | |
84 | - lib="$(find_lib "$(dirname "${source}")/${old_install_name//@loader_path/}")" | |
85 | - else | |
86 | - lib="$(find_lib "${old_install_name}")" | |
87 | - fi | |
88 | - local new_install_name="$(bundle_cp "${lib}")" | |
89 | - if [[ "${new_install_name}" != "" ]]; then | |
90 | - install_name_tool -change "${old_install_name}" "${new_install_name}" "${target}" 2> /dev/null | |
91 | - fi | |
92 | - done | |
93 | - # https://stackoverflow.com/a/71753248/6910609 | |
94 | - codesign --force -s - "${target}" 2> /dev/null | |
95 | - echo >&2 "${target}" | |
96 | - done | |
97 | -} | |
98 | - | |
99 | -bundle_cache() { | |
100 | - local awaiting_file=1; | |
101 | - while IFS= read -r line; do | |
102 | - if (( awaiting_file )); then | |
103 | - if [[ ! "${line}" =~ ^"#" && "${line}" != "" ]]; then | |
104 | - line="${line##\ }" | |
105 | - line="${line#\"}" | |
106 | - line="${line%%\ }" | |
107 | - line="${line%\"}" | |
108 | - line="\"$(bundle_cp "${line}")\"" | |
109 | - awaiting_file=0 | |
110 | - fi | |
111 | - else | |
112 | - if [[ "${line}" == "" ]]; then | |
113 | - awaiting_file=1 | |
114 | - fi | |
115 | - fi | |
116 | - printf '%s\n' "${line}" | |
117 | - done | |
118 | -} | |
119 | - | |
120 | -# Check dependencies | |
121 | -check_dependencies otool grep cut sed greadlink qlmanage sips iconutil | |
122 | - | |
123 | -# Creates temporary directory | |
124 | -echo "* Creating temporary directory" | |
125 | -tmp="$(mktemp -d)" | |
126 | -trap 'echo "* Removing temporary directory \"${tmp}\""; rm -rf "${tmp}"' EXIT | |
127 | - | |
128 | -bundle="pw3270.app" | |
129 | -bundle_path="${bundle}/Contents" | |
130 | -exe_path="${bundle_path}/MacOS" | |
131 | -lib_path="${bundle_path}/Frameworks" | |
132 | -res_path="${bundle_path}/Resources" | |
133 | - | |
134 | -rm -fr "${bundle}" | |
135 | - | |
136 | -mkdir -p "${bundle_path}" | |
137 | -cp "Info.plist" "${bundle_path}" | |
138 | - | |
139 | -mkdir -p "${res_path}" | |
140 | -cp -r "../ui/macos.ui.xml" "${res_path}/pw3270.ui.xml" | |
141 | -cp -r "$(brew --prefix)/share/pw3270/remap" "${res_path}" | |
142 | -cp "$(brew --prefix)/share/pw3270/colors.conf" "${res_path}" | |
143 | - | |
144 | -# Bundle GLib schemas | |
145 | -echo "* Bundling GLib schemas" | |
146 | -mkdir -p "${tmp}/schemas" | |
147 | -cp "../schemas/"*".gschema.xml" "${tmp}/schemas" | |
148 | -cp "$(pkg-config gtk+-3.0 --variable=prefix)/share/glib-2.0/schemas/org.gtk.Settings."*".gschema.xml" "${tmp}/schemas" | |
149 | -glib-compile-schemas --targetdir="${res_path}" "${tmp}/schemas" | |
150 | - | |
151 | -# Create the GTK settings file | |
152 | -# https://developer.gnome.org/gtk3/stable/GtkSettings.html | |
153 | -mkdir -p "${res_path}/gtk-3.0" | |
154 | -cat > "${res_path}/gtk-3.0/settings.ini" << EOF | |
155 | -[Settings] | |
156 | -gtk-theme-name=Adwaita | |
157 | -gtk-print-preview-command="open -b com.apple.Preview %f" | |
158 | -EOF | |
159 | - | |
160 | -# Make icon bundle | |
161 | -echo "* Creating app icon bundle" | |
162 | -iconset="${tmp}/pw3270.iconset" | |
163 | -rm -fr "${iconset}" | |
164 | -mkdir -p "${iconset}" | |
165 | -icon_sizes=("16" "32" "64" "128" "256" "512" "1024") | |
166 | -for ((i=1; i < ${#icon_sizes[*]}; i++)); do | |
167 | - size=${icon_sizes[$((i - 1))]} | |
168 | - convert -density "${size}" -resize "${size}x" -background transparent "../branding/pw3270.svg" "${iconset}/icon_${size}x${size}.png" | |
169 | - | |
170 | - size2x=${icon_sizes[${i}]} | |
171 | - convert -density "${size2x}" -resize "${size2x}x" -background transparent "../branding/pw3270.svg" "${iconset}/icon_${size}x${size}@2x.png" | |
172 | -done | |
173 | -iconutil -c icns -o "${res_path}/pw3270.icns" "${iconset}" | |
174 | - | |
175 | - | |
176 | -# Copy icons | |
177 | -echo "* Copying icons" | |
178 | -mkdir -p "${res_path}/icons" | |
179 | -cp -r "$(brew --prefix adwaita-icon-theme)/share/icons/" "${res_path}/icons" | |
180 | -cp -r "$(brew --prefix hicolor-icon-theme)/share/icons/" "${res_path}/icons" | |
181 | -mogrify -format png -path "${res_path}" -background transparent "../branding/*.svg" | |
182 | - | |
183 | -# Copy themes | |
184 | -echo "* Copying themes" | |
185 | -mkdir -p "${res_path}/themes" | |
186 | -cp -a "$(brew --prefix gtk+3)/share/themes/Mac" "${res_path}/themes" | |
187 | - | |
188 | -# Copy mime database | |
189 | -echo "* Copying mime database" | |
190 | -mkdir -p "${res_path}/mime" | |
191 | -cp "$(pkg-config shared-mime-info --variable=prefix)/share/mime/mime.cache" "${res_path}/mime" | |
192 | - | |
193 | -# Copy executables | |
194 | -echo "* Copying executables" | |
195 | -mkdir -p "${exe_path}" | |
196 | -bundle_cp "../.bin/Release/pw3270" | |
197 | -cp "launcher.sh" "${exe_path}" | |
198 | - | |
199 | -# Bundle GdkPixbuf Image Loader Modules | |
200 | -echo "* Bundling GdkPixbuf Image Loader Modules" | |
201 | -gdk-pixbuf-query-loaders | bundle_cache > "${res_path}/gdk-loaders.cache" | |
202 | - | |
203 | -# Bundle GTK+ Input Method Modules | |
204 | -echo "* Bundling GTK+ Input Method Modules" | |
205 | -gtk_prefix="$(pkg-config gtk+-3.0 --variable prefix)" | |
206 | -gtk-query-immodules-3.0 | bundle_cache \ | |
207 | - | sed "s|${gtk_prefix}/share/locale|@executable_path/../Resources/locale|g" \ | |
208 | - > "${res_path}/gtk.immodules" | |
209 | - | |
210 | -# Bundle print backends | |
211 | -echo "* Bundling print backends" | |
212 | -mkdir -p "${lib_path}/printbackends" | |
213 | -for backend in "$(pkg-config gtk+-3.0 --variable=prefix)/lib/gtk-3.0/$(pkg-config gtk+-3.0 --variable=gtk_binary_version)/printbackends/"*.so; do | |
214 | - bundle_cp "${backend}" | |
215 | - # TODO: update bundle_cp to inform destiny dir | |
216 | - mv "${lib_path}/$(basename "${backend}")" "${lib_path}/printbackends" | |
217 | -done | |
218 | - | |
219 | -# TODO: gerar o Info.plist com a versão do macOS $(sw_vers -productVersion) | |
220 | - | |
221 | -# Bundle locale | |
222 | -echo "* Bundling locale" | |
223 | -mkdir -p "${res_path}/locale" | |
224 | -cp -r "../.bin/locale/" "${res_path}/locale" | |
225 | -cp "$(brew --prefix)/share/locale/pt_BR/LC_MESSAGES/lib3270"*".mo" "${res_path}/locale/pt_BR/LC_MESSAGES" | |
226 | -cp "$(brew --prefix)/share/locale/pt_BR/LC_MESSAGES/libv3270"*".mo" "${res_path}/locale/pt_BR/LC_MESSAGES" |
macos/launcher.sh
... | ... | @@ -1,65 +0,0 @@ |
1 | -#!/usr/bin/env sh | |
2 | -#@author André Breves <andre.breves@gmail.com> | |
3 | -set -euo | |
4 | - | |
5 | -cd "${0%/*}" | |
6 | -executable_path="${PWD}" | |
7 | -cd .. | |
8 | -contents_path="${PWD}" | |
9 | -cd Resources | |
10 | -resource_path="${PWD}" | |
11 | - | |
12 | -info_plist="${contents_path}/Info.plist" | |
13 | -bundle_identifier=$(plutil -extract "CFBundleIdentifier" xml1 -o - "${info_plist}" | sed -n "s/.*<string>\(.*\)<\/string>.*/\1/p") | |
14 | - | |
15 | -# XDG Base Directory Specification | |
16 | -# https://specifications.freedesktop.org/basedir-spec/latest/ar01s03.html | |
17 | - | |
18 | -# Defines the base directory relative to which user specific configuration files should be stored | |
19 | -export XDG_CONFIG_HOME="${HOME}/Library/Application Support/${bundle_identifier}" | |
20 | - | |
21 | -# Defines the base directory relative to which user specific data files should be stored | |
22 | -export XDG_DATA_HOME="${HOME}/Library/Application Support/${bundle_identifier}" | |
23 | - | |
24 | -# Defines the preference-ordered set of base directories to search for data files in addition to the $XDG_DATA_HOME base directory | |
25 | -export XDG_DATA_DIRS="${resource_path}" | |
26 | - | |
27 | -# Defines the preference-ordered set of base directories to search for configuration files in addition to the $XDG_CONFIG_HOME base directory | |
28 | -export XDG_CONFIG_DIRS="${resource_path}" | |
29 | - | |
30 | -# Defines the base directory relative to which user specific non-essential data files should be stored | |
31 | -export XDG_CACHE_HOME="${HOME}/Library/Caches/${bundle_identifier}" | |
32 | - | |
33 | - | |
34 | -# Running GTK+ Applications | |
35 | -# https://developer.gnome.org/gtk3/stable/gtk-running.html | |
36 | - | |
37 | -# If set, makes GTK+ use $GTK_DATA_PREFIX instead of the prefix configured when GTK+ was compiled | |
38 | -export GTK_DATA_PREFIX="${resource_path}" | |
39 | - | |
40 | -# Specifies the file listing the Input Method modules to load | |
41 | -export GTK_IM_MODULE_FILE="${resource_path}/gtk.immodules" | |
42 | - | |
43 | -# Specifies the file listing the GdkPixbuf loader modules to load | |
44 | -export GDK_PIXBUF_MODULE_FILE="${resource_path}/gdk-loaders.cache" | |
45 | - | |
46 | -# Specifies a list of directories to search when GTK+ is looking for dynamically loaded objects such as the modules | |
47 | -# specified by GTK_MODULES, theme engines, input method modules, file system backends and print backends. | |
48 | -export GTK_PATH="${contents_path}/Frameworks" | |
49 | - | |
50 | -# Running GIO applications | |
51 | -# https://developer.gnome.org/gio/stable/running-gio-apps.html | |
52 | - | |
53 | -# This variable can be set to the names of directories to consider when looking for compiled schemas for GSettings | |
54 | -export GSETTINGS_SCHEMA_DIR="${resource_path}" | |
55 | - | |
56 | -# export LANG="pt_BR" | |
57 | -# export LC_MESSAGES="pt_BR" | |
58 | -# export LC_ALL="pt_BR" | |
59 | - | |
60 | -mkdir -p "${XDG_CONFIG_HOME}" | |
61 | -mkdir -p "${XDG_DATA_HOME}" | |
62 | -mkdir -p "${XDG_CACHE_HOME}" | |
63 | - | |
64 | -cd "${resource_path}" | |
65 | -exec "${executable_path}/pw3270" |