summaryrefslogtreecommitdiffstats
path: root/Modules/BundleUtilities.cmake
diff options
context:
space:
mode:
authorClinton Stimpson <clinton@elemtech.com>2011-05-26 21:16:58 (GMT)
committerDavid Cole <david.cole@kitware.com>2011-05-27 20:11:43 (GMT)
commit7ac7b437b8bfc344e0d7e451d419596ea809d439 (patch)
treee1e52805a1958a8a4ff5b09a2e341fed05660a8e /Modules/BundleUtilities.cmake
parentba6579f7a3a687a42572f683441f56cbc70ae928 (diff)
downloadCMake-7ac7b437b8bfc344e0d7e451d419596ea809d439.zip
CMake-7ac7b437b8bfc344e0d7e451d419596ea809d439.tar.gz
CMake-7ac7b437b8bfc344e0d7e451d419596ea809d439.tar.bz2
BundleUtilities: Work w/ non .app exes on Mac (#12034)
Also add a test of BundleUtilities including an exe, some shared libs, a plugin, and a framework-style lib. This test presently runs (and this functionality works) on Linux, Mac and Windows. For now, the framework-style lib is built as a plain old shared lib because there is another yet-unresolved issue with local frameworks without rpaths on the Mac.
Diffstat (limited to 'Modules/BundleUtilities.cmake')
-rw-r--r--Modules/BundleUtilities.cmake51
1 files changed, 25 insertions, 26 deletions
diff --git a/Modules/BundleUtilities.cmake b/Modules/BundleUtilities.cmake
index 44f2c20..40084b4 100644
--- a/Modules/BundleUtilities.cmake
+++ b/Modules/BundleUtilities.cmake
@@ -53,9 +53,8 @@
#
# GET_DOTAPP_DIR(<exe> <dotapp_dir_var>)
# Returns the nearest parent dir whose name ends with ".app" given the full
-# path to an executable. If there is no such parent dir, then return a dir at
-# the same level as the executable, named with the executable's base name and
-# ending with ".app"
+# path to an executable. If there is no such parent dir, then simply return
+# the dir containing the executable.
#
# The returned directory may or may not exist.
#
@@ -227,35 +226,35 @@ endfunction(get_bundle_main_executable)
function(get_dotapp_dir exe dotapp_dir_var)
set(s "${exe}")
- set(has_dotapp_parent 0)
if(s MATCHES "^.*/.*\\.app/.*$")
- set(has_dotapp_parent 1)
- endif(s MATCHES "^.*/.*\\.app/.*$")
-
- set(done 0)
- while(NOT ${done})
- get_filename_component(snamewe "${s}" NAME_WE)
- get_filename_component(sname "${s}" NAME)
- get_filename_component(sdir "${s}" PATH)
- if(has_dotapp_parent)
- # If there is a ".app" parent directory,
- # ascend until we hit it:
- # (typical of a Mac bundle executable)
- #
+ # If there is a ".app" parent directory,
+ # ascend until we hit it:
+ # (typical of a Mac bundle executable)
+ #
+ set(done 0)
+ while(NOT ${done})
+ get_filename_component(snamewe "${s}" NAME_WE)
+ get_filename_component(sname "${s}" NAME)
+ get_filename_component(sdir "${s}" PATH)
set(s "${sdir}")
if(sname MATCHES "\\.app$")
set(done 1)
set(dotapp_dir "${sdir}/${sname}")
endif(sname MATCHES "\\.app$")
- else(has_dotapp_parent)
- # Otherwise use a directory named the same
- # as the exe, but with a ".app" extension:
- # (typical of a non-bundle executable on Mac, Windows or Linux)
- #
- set(done 1)
- set(dotapp_dir "${sdir}/${snamewe}.app")
- endif(has_dotapp_parent)
- endwhile(NOT ${done})
+ endwhile(NOT ${done})
+ else(s MATCHES "^.*/.*\\.app/.*$")
+ # Otherwise use a directory containing the exe
+ # (typical of a non-bundle executable on Mac, Windows or Linux)
+ #
+ is_file_executable("${s}" is_executable)
+ if(is_executable)
+ get_filename_component(sdir "${s}" PATH)
+ set(dotapp_dir "${sdir}")
+ else(is_executable)
+ set(dotapp_dir "${s}")
+ endif(is_executable)
+ endif(s MATCHES "^.*/.*\\.app/.*$")
+
set(${dotapp_dir_var} "${dotapp_dir}" PARENT_SCOPE)
endfunction(get_dotapp_dir)