3 Windows::listLibForManifest () {
10 -exec basename {} \; \
12 printf ' <file name="{}"/>\n'
15 Windows::printManifest () {
19 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
20 <assemblyIdentity type="win32" name="lib" version="1.0.0.0"/>
21 $(Windows::listLibForManifest "${lib_dir}")
26 Windows::bundleLibFromFile () {
29 exe_file="$(cygpath --unix "${exe_file}")"
31 ntldd --recursive "${exe_file}" \
32 | egrep -i '\.dll => [A-Z]:\\msys64\\' \
33 | sed -e 's/ (0x[0-9a-f]*)$//;s/^.* => //' \
34 | cygpath --unix --file - \
37 dll_basename="$(basename "${dll_file}")"
39 if [ -f "${bundle_dir}/${dll_basename}" ]
44 cp --preserve=timestamps "${dll_file}" "${lib_dir}/${dll_basename}"
46 if [ "${dll_basename}" = 'libgtk-win32-2.0-0.dll' ]
48 mingw="$(which 'libgtk-win32-2.0-0.dll' | cut -f2 -d'/')"
50 for component_dir in \
51 'share/themes/MS-Windows' \
52 'share/icons/hicolor' \
53 'lib/gdk-pixbuf-2.0' \
56 if ! [ -d "${bundle_dir}/${component_dir}" ]
58 mkdir --parents "${bundle_dir}/$(dirname "${component_dir}")"
59 cp -r --preserve=timestamps "/${mingw}/${component_dir}" \
60 "${bundle_dir}/${component_dir}"
64 find "${bundle_dir}/lib" -type f -name '*.a' -exec rm {} \;
65 find "${bundle_dir}/lib" -type f -name '*.h' -exec rm {} \;
66 find "${bundle_dir}/lib" -type d -exec rmdir --ignore-fail-on-non-empty {} \;
71 system_name="${1}"; shift
72 bundle_dir="${1}"; shift
73 exe_file="${1}"; shift
75 registry_dir="${bundle_dir}/registry"
77 case "${system_name}" in
79 mkdir --parents "${registry_dir}"
80 printf '%s\n' "${exe_file}" > "${registry_dir}/$(uuidgen)"
83 bundle_dir="$(cygpath --unix "${bundle_dir}")"
85 lib_dir="${bundle_dir}/lib"
86 mkdir --parents "${lib_dir}"
88 if [ -d "${registry_dir}" ]
90 for registry_entry in "${registry_dir}"/*
92 exe_file="$(cat "${registry_entry}")"
94 Windows::bundleLibFromFile "${exe_file}"
96 rm "${registry_entry}"
97 rmdir --ignore-fail-on-non-empty "${registry_dir}"
100 manifest_file="${lib_dir}/lib.manifest"
101 Windows::printManifest "${lib_dir}" > "${manifest_file}"
105 printf 'ERROR: unsupported system: %s\n' "${system_name}" >&2