aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmake/CMakeLists.txt43
-rwxr-xr-xcmake/dists/bundle-startup.sh9
-rwxr-xr-xcmake/dists/cmake/Modules/AnalyzeDylibDeps.cmake54
-rw-r--r--cmake/dists/cmake/Modules/FileUtils.cmake28
-rw-r--r--cmake/src/config-darwin.inc50
5 files changed, 128 insertions, 56 deletions
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
index 57cb89a9..ddd76c6f 100644
--- a/cmake/CMakeLists.txt
+++ b/cmake/CMakeLists.txt
@@ -46,6 +46,7 @@ set(PACKAGE_IRC "#ultrastardx at quakenet.org")
find_package(PPC 2.2.0 REQUIRED)
include(UsePascal)
include(ExpandVersion)
+include(FileUtils)
##
# LIBRARIES
@@ -192,6 +193,30 @@ install(
COPYING.txt
DESTINATION ${USDX_INSTALL_DATA_DIR}
)
+# install fink libs
+if(APPLE)
+ if(EXISTS ${usdx_exe})
+ include(AnalyzeDylibDeps)
+ analyze_dylib_deps(${usdx_exe} libdeps)
+ set(USDX_DYLIB_DIR ${CMAKE_CURRENT_BINARY_DIR}/dylib)
+
+ # install() does not follow symlinks so we have to copy the libs at cmake time
+ file(MAKE_DIRECTORY ${USDX_DYLIB_DIR})
+ foreach(dylib ${libdeps})
+ get_filename_component(dylib_name ${dylib} NAME)
+ file_copy_if_different(${dylib} ${USDX_DYLIB_DIR}/${dylib_name})
+ endforeach()
+
+ install(DIRECTORY ${USDX_DYLIB_DIR}/ DESTINATION dylib USE_SOURCE_PERMISSIONS)
+ else()
+ message("
+!! To create a Mac OS X bundle, first compile with
+!! \"make\" then
+!! reconfigure with cmake (e.g. \"cmake ..\") and finally call
+!! \"cpack -G Bundle\"
+")
+ endif()
+endif(APPLE)
# add "uninstall" target
# See: http://www.vtk.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F
@@ -219,12 +244,20 @@ ADD_CUSTOM_TARGET(uninstall
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Karaoke program that evaluates your performance")
set(CPACK_PACKAGE_VENDOR "UltraStar Deluxe Team")
-set(CPACK_PACKAGE_FILE_NAME "ultrastardx-${CMAKE_PACKAGE_VERSION}")
-set(CPACK_SOURCE_PACKAGE_FILE_NAME "ultrastardx-src-${CMAKE_PACKAGE_VERSION}")
+set(CPACK_PACKAGE_FILE_NAME "ultrastardx-${CPACK_PACKAGE_VERSION}")
+set(CPACK_SOURCE_PACKAGE_FILE_NAME "ultrastardx-src-${CPACK_PACKAGE_VERSION}")
set(CPACK_SOURCE_GENERATOR "TBZ2")
set(CPACK_PACKAGE_EXECUTABLES "ultrastardx" "ultrastardx")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING.txt")
-set(CPACK_PACKAGE_INSTALL_DIRECTORY "ultrastardx ${CMAKE_PACKAGE_VERSION}")
+set(CPACK_PACKAGE_INSTALL_DIRECTORY "ultrastardx ${CPACK_PACKAGE_VERSION}")
+
+if(APPLE)
+ set(CPACK_BUNDLE_NAME UltraStarDeluxe)
+ set(CPACK_BUNDLE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/icons/ultrastardx.icns)
+ set(CPACK_BUNDLE_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/src/macosx/Info.plist)
+ set(CPACK_BUNDLE_STARTUP_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/dists/bundle-startup.sh)
+ #CPACK_PACKAGE_ICON
+endif(APPLE)
if(WIN32 AND NOT UNIX)
set(CPACK_NSIS_DISPLAY_NAME "Ultrastar Deluxe")
@@ -266,13 +299,13 @@ set(CPACK_SOURCE_IGNORE_FILES
"^${PROJECT_SOURCE_DIR}/ultrastardx\\\\."
)
-#include(CPack)
+include(CPack)
##
# SUMMARY
##
-message(STATUS "
+message("
!! Configuration of ${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION} done!
!!
!! Type \"make\" to compile and
diff --git a/cmake/dists/bundle-startup.sh b/cmake/dists/bundle-startup.sh
new file mode 100755
index 00000000..11fcea2e
--- /dev/null
+++ b/cmake/dists/bundle-startup.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+#
+# Author: UltraStar Deluxe Team
+
+USDX_BUNDLE="`echo "$0" | sed -e 's/\/Contents\/MacOS\/UltraStarDeluxe//'`"
+USDX_RESOURCES="$USDX_BUNDLE/Contents/Resources"
+
+export "DYLD_LIBRARY_PATH=$USDX_RESOURCES/dylib"
+exec "$USDX_RESOURCES/bin/ultrastardx"
diff --git a/cmake/dists/cmake/Modules/AnalyzeDylibDeps.cmake b/cmake/dists/cmake/Modules/AnalyzeDylibDeps.cmake
new file mode 100755
index 00000000..004879da
--- /dev/null
+++ b/cmake/dists/cmake/Modules/AnalyzeDylibDeps.cmake
@@ -0,0 +1,54 @@
+# otool: Mac OS X object file displaying tool
+find_program(OTOOL otool)
+
+function(extract_dylib_deps dylib deplist_name)
+ execute_process(
+ COMMAND ${OTOOL} -L ${dylib}
+ OUTPUT_VARIABLE otool_out
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ string(REPLACE "\n" ";" otool_out ${otool_out})
+ set(deplist "")
+ foreach(line ${otool_out})
+ if(line MATCHES version)
+ # extract dylib-name
+ string(REGEX REPLACE "^[\t ]*([^ ]+) .*" "\\1" libname "${line}")
+ # filter out system libs
+ if(NOT libname MATCHES ^/usr/lib AND
+ NOT libname MATCHES ^/System/Library)
+ list(APPEND deplist ${libname})
+ endif()
+ endif()
+ endforeach()
+ set(${deplist_name} "${deplist}" PARENT_SCOPE)
+endfunction(extract_dylib_deps)
+
+function(ANALYZE_DYLIB_DEPS module deplist_name)
+ # init queue (contains libs to analyze)
+ set(queue "")
+ # add module as first "lib" to analyze
+ list(APPEND queue ${module})
+
+ # init dep_list
+ set(deps "")
+
+ # analyze each lib enqueued until queue is empty
+ while(queue)
+ # dequeue front element
+ list(GET queue 0 current_lib)
+ list(REMOVE_AT queue 0)
+
+ # get dependencies of current dylib
+ extract_dylib_deps(${current_lib} current_deps)
+ # extract dependencies not already in the deps list
+ foreach(lib ${current_deps})
+ list(FIND deps ${lib} lib_in_deps)
+ if(lib_in_deps EQUAL -1)
+ list(APPEND queue ${lib})
+ list(APPEND deps ${lib})
+ endif()
+ endforeach()
+ endwhile()
+
+ set(${deplist_name} "${deps}" PARENT_SCOPE)
+endfunction(ANALYZE_DYLIB_DEPS)
diff --git a/cmake/dists/cmake/Modules/FileUtils.cmake b/cmake/dists/cmake/Modules/FileUtils.cmake
index 51707d5a..856bb2e1 100644
--- a/cmake/dists/cmake/Modules/FileUtils.cmake
+++ b/cmake/dists/cmake/Modules/FileUtils.cmake
@@ -17,7 +17,7 @@ endfunction(FILE_SYMLINK)
function(FILE_COPY_DIR src dst)
if(NOT EXISTS ${src})
- message(FATAL_ERROR "File \"${src}\" does not exist!")
+ message(FATAL_ERROR "Directory \"${src}\" does not exist!")
endif(NOT EXISTS ${src})
execute_process(
COMMAND ${CMAKE_COMMAND} -E copy_directory "${src}" "${dst}"
@@ -27,3 +27,29 @@ function(FILE_COPY_DIR src dst)
message(FATAL_ERROR "Copy \"${src}\" to \"${dst}\" failed!")
endif(result)
endfunction(FILE_COPY_DIR)
+
+function(FILE_COPY src dst)
+ if(NOT EXISTS ${src})
+ message(FATAL_ERROR "File \"${src}\" does not exist!")
+ endif(NOT EXISTS ${src})
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E copy "${src}" "${dst}"
+ RESULT_VARIABLE result
+ )
+ if(result)
+ message(FATAL_ERROR "Copy \"${src}\" to \"${dst}\" failed!")
+ endif(result)
+endfunction(FILE_COPY)
+
+function(FILE_COPY_IF_DIFFERENT src dst)
+ if(NOT EXISTS ${src})
+ message(FATAL_ERROR "File \"${src}\" does not exist!")
+ endif(NOT EXISTS ${src})
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different "${src}" "${dst}"
+ RESULT_VARIABLE result
+ )
+ if(result)
+ message(FATAL_ERROR "Copy \"${src}\" to \"${dst}\" failed!")
+ endif(result)
+endfunction(FILE_COPY_IF_DIFFERENT)
diff --git a/cmake/src/config-darwin.inc b/cmake/src/config-darwin.inc
deleted file mode 100644
index b0ad79e7..00000000
--- a/cmake/src/config-darwin.inc
+++ /dev/null
@@ -1,50 +0,0 @@
-{*****************************************************************
- * Configuration file for ultrastardx 1.1-alpha
- * src/config-darwin.inc. Generated from config.inc.in by configure.
- *****************************************************************}
-
-{* Libraries *}
-
-{$DEFINE HaveFFmpeg}
-{$IF Defined(HaveFFmpeg) and Defined(IncludeConstants)}
- av__codec = 'libavcodec';
- LIBAVCODEC_VERSION_MAJOR = 51;
- LIBAVCODEC_VERSION_MINOR = 49;
- LIBAVCODEC_VERSION_RELEASE = 0;
-
- av__format = 'libavformat';
- LIBAVFORMAT_VERSION_MAJOR = 52;
- LIBAVFORMAT_VERSION_MINOR = 2;
- LIBAVFORMAT_VERSION_RELEASE = 0;
-
- av__util = 'libavutil';
- LIBAVUTIL_VERSION_MAJOR = 49;
- LIBAVUTIL_VERSION_MINOR = 6;
- LIBAVUTIL_VERSION_RELEASE = 0;
-{$IFEND}
-
-{$DEFINE HaveSWScale}
-{$IF Defined(HaveSWScale) and Defined(IncludeConstants)}
- sw__scale = 'libswscale';
- LIBSWSCALE_VERSION_MAJOR = 0;
- LIBSWSCALE_VERSION_MINOR = 5;
- LIBSWSCALE_VERSION_RELEASE = 0;
-{$IFEND}
-
-{$UNDEF HaveProjectM}
-{$IF Defined(HaveProjectM) and Defined(IncludeConstants)}
- ProjectM_DataDir = '';
- PROJECTM_VERSION_MAJOR = 0;
- PROJECTM_VERSION_MINOR = 0;
- PROJECTM_VERSION_RELEASE = 0;
-{$IFEND}
-
-{$DEFINE HavePortaudio}
-{$IF Defined(HavePortaudio) and Defined(IncludeConstants)}
- PORTAUDIO_VERSION_MAJOR = 19;
- PORTAUDIO_VERSION_MINOR = 0;
- PORTAUDIO_VERSION_RELEASE = 0;
-{$IFEND}
-
-{$UNDEF HavePortmixer}
-