X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=library-bundler;h=54056c41fe527b803fc399d9ab42898931bcf1ee;hp=62f48f12784bfe025c1bd779ff3861c147d913cf;hb=HEAD;hpb=e050a83cd52858eb64e2750ac440c9c554e2367c diff --git a/library-bundler b/library-bundler index 62f48f12..e9a7ccdd 100755 --- a/library-bundler +++ b/library-bundler @@ -7,7 +7,7 @@ export LANGUAGE="${LANG}" _sed () { case "${system_name}" in - 'macos') + 'macos'|'freebsd') gsed "${@}" ;; *) @@ -16,13 +16,13 @@ _sed () { esac } -_cpr () { +_cp () { case "${system_name}" in - 'macos') - cp -R ${@} + 'macos'|'freebsd') + gcp -R --preserve=timestamps -H -L "${1}" "${2}" ;; *) - cp -R --preserve=timestamps ${@} + cp -R --preserve=timestamps -H -L "${1}" "${2}" ;; esac } @@ -39,7 +39,7 @@ Common::getPath () { if [ "${file_path}" = '-' ] then tr '\n' '\0' \ - | xargs -0 -n1 -P1 -I{} \ + | xargs -0 -P1 -I{} \ cygpath --unix '{}' else cygpath --unix "${file_path}" @@ -79,7 +79,7 @@ Common::stripLdd () { Multi::excludeLdd () { case "${system_name}" in - 'linux') + 'linux'|'freebsd') # - always bundle built-in libraries # - always rely on up-to-date x11 and gl libraries, bundling them will break on future distros # - gtk is not easily bundlable on linux because it looks for harcoded system path to optional @@ -103,6 +103,11 @@ Multi::excludeLdd () { | egrep -q '/libatk|/libgdk|/libgtk|/libgio|/libglib|/libgmodule|/libgobject|/libcairo|/libpango|/libfontconfig|/libfreetype' then Common::noOp + # FreeBSD specific + elif echo "${ldd_line}" \ + | egrep -q '/libc\+\+|/libgxxrt' + then + Common::noOp else echo "${ldd_line}" fi @@ -128,7 +133,7 @@ Multi::printLdd () { local exe_file="${1}" case "${system_name}" in - 'linux') + 'linux'|'freebsd') ldd "${exe_file}" ;; 'windows') @@ -141,7 +146,7 @@ Multi::printLdd () { Multi::getGtkThemeName () { case "${system_name}" in - 'linux') + 'linux'|'freebsd') echo 'Adwaita' ;; 'windows') @@ -155,7 +160,7 @@ Multi::getGtkThemeName () { Multi::getGtkLibName () { case "${system_name}" in - 'linux') + 'linux'|'freebsd') echo 'libgtk-x11-2.0.so.0' ;; 'windows') @@ -172,16 +177,16 @@ Multi::getRootPrefix () { case "${system_name}" in 'linux') - echo "${lib_file}" \ - | cut -f2 -d'/' + echo 'usr' + ;; + 'freebsd'|'macos') + echo 'usr/local' ;; 'windows') basename "${lib_file}" \ | xargs -n1 -P1 which \ | cut -f2 -d'/' ;; - 'macos') - echo 'usr/local' esac } @@ -189,7 +194,7 @@ Multi::getLibPrefix () { local lib_file="${1}" case "${system_name}" in - 'linux') + 'linux'|'freebsd') dirname "${lib_file}" \ | cut -f3- -d'/' ;; @@ -207,7 +212,7 @@ Multi::getGtkDeps () { local gtk_theme_name="${2}" case "${system_name}" in - 'linux'|'windows') + 'linux'|'freebsd'|'windows') cat <<-EOF share/themes/${gtk_theme_name}/gtk-2.0 share/icons/hicolor @@ -229,7 +234,7 @@ Multi::getGtkDeps () { esac case "${system_name}" in - 'linux') + 'linux'|'freebsd') cat <<-EOF ${lib_prefix}/libatk-bridge-2.0.so.0 ${lib_prefix}/libcanberra-0.30 @@ -282,14 +287,10 @@ Multi::bundleGtkDepsFromFile () { mkdir -p "${bundle_dir}/$(dirname "${bundle_component_dir}")" - _cpr -H -L \ + _cp \ "${real_component_dir}" \ "${bundle_dir}/${bundle_component_dir}" - touch -r \ - "/${real_component_dir}" \ - "${bundle_dir}/${bundle_component_dir}" - Multi::rewriteLoadersCache "${bundle_dir}/${bundle_component_dir}" fi done @@ -317,11 +318,7 @@ Multi::bundleLibFromFile () { continue fi - cp -H \ - "${lib_file}" \ - "${lib_dir}/${lib_basename}" - - touch -r \ + _cp \ "${lib_file}" \ "${lib_dir}/${lib_basename}" @@ -336,6 +333,9 @@ Multi::bundleLibFromFile () { } Multi::cleanUp () { + # Remove from bundle things that useless to be distributed, + # like headers or static libraries, also remove + # empty directories. find "${bundle_dir}/lib" \ -type f \ -name '*.a' \ @@ -349,8 +349,8 @@ Multi::cleanUp () { find "${bundle_dir}/lib" \ -depth \ -type d \ - -exec rmdir {} \; \ - || true + -empty \ + -exec rmdir {} \; } Linux::getRpath () { @@ -389,6 +389,7 @@ Linux::patchExe () { local exe_file="${1}" local linux_rpath_string=$"$(Linux::getRpath "${exe_file}")" + chmod u+w,go-w "${exe_file}" patchelf --set-rpath "${linux_rpath_string}" "${exe_file}" } @@ -402,6 +403,7 @@ Linux::patchLib () { | while read exe_file do Linux::patchExe "${exe_file}" + chmod ugo-x "${exe_file}" done } @@ -446,7 +448,7 @@ Windows::listLibForManifest () { -name '*.dll' \ -exec basename {} \; \ | tr '\n' '\0' \ - | xargs -0 -n1 -P1 -I{} \ + | xargs -0 -P1 -I{} \ printf ' \n' } @@ -484,7 +486,7 @@ case "${system_name}" in Common::getPath "${exe_file}" > "${registry_dir}/$(uuidgen)" exit ;; - 'linux') + 'linux'|'freebsd') exe_action='Linux::patchExe' lib_action='Linux::patchLib' ;;