From b6728c1405d3a1a0ba3daa480f18e3d765a97b9f Mon Sep 17 00:00:00 2001 From: comex Date: Fri, 30 Aug 2013 01:35:43 -0400 Subject: [PATCH] Avoid unnecessary bundle copies on OS X: - Make "copy data into bundle" depend on the files actually being changed, rather than being run on every build. - postprocess_bundle depends on system files and checking the Dolphin binary and all that, and would be iffy to try to avoid rerunning; but it's only needed to produce a redistributable bundle, so add SKIP_POSTPROCESS_BUNDLE to skip it for development. --- CMakeLists.txt | 5 -- Source/Core/DolphinWX/CMakeLists.txt | 102 +++++++++++++++++++-------- 2 files changed, 71 insertions(+), 36 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d94a79a91..dcec534409 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -773,11 +773,6 @@ if((NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")) install(DIRECTORY Data/User/ DESTINATION ${datadir}/user PATTERN) install(DIRECTORY Data/Sys/ DESTINATION ${datadir}/sys PATTERN) endif() -include(FindGettext) -if(GETTEXT_FOUND AND NOT DISABLE_WX) - file(GLOB LINGUAS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} Languages/po/*.po) - GETTEXT_CREATE_TRANSLATIONS(Languages/po/dolphin-emu.pot ALL ${LINGUAS}) -endif() if((NOT ${CMAKE_SYSTEM_NAME} MATCHES "Linux|FreeBSD|Darwin")) install(FILES Data/license.txt DESTINATION ${datadir}) endif() diff --git a/Source/Core/DolphinWX/CMakeLists.txt b/Source/Core/DolphinWX/CMakeLists.txt index 8929b868da..eed1123066 100644 --- a/Source/Core/DolphinWX/CMakeLists.txt +++ b/Source/Core/DolphinWX/CMakeLists.txt @@ -1,3 +1,7 @@ +if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + option(SKIP_POSTPROCESS_BUNDLE "Skip postprocessing bundle for redistributability" OFF) +endif() + set(LIBS core ${LZO} discio @@ -170,6 +174,13 @@ if(USE_UPNP) set(LIBS ${LIBS} miniupnpc) endif() +include(FindGettext) +if(GETTEXT_FOUND AND wxWidgets_FOUND) + file(GLOB LINGUAS ${CMAKE_SOURCE_DIR}/Languages/po/*.po) + add_custom_target(translations ALL) + GETTEXT_CREATE_TRANSLATIONS(${CMAKE_SOURCE_DIR}/Languages/po/dolphin-emu.pot ${LINGUAS}) +endif() + if(ANDROID) set(DOLPHIN_EXE main) add_library(${DOLPHIN_EXE} SHARED ${SRCS}) @@ -217,47 +228,76 @@ else() MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in ) - # Fix up the bundle after it is finished. - # There does not seem to be an easy way to run CMake commands post-build, - # so we invoke CMake again on a generated script. - file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/postprocess_bundle.cmake " - include(BundleUtilities) - message(\"Fixing up application bundle: ${BUNDLE_PATH}\") - set(BU_CHMOD_BUNDLE_ITEMS ON) - fixup_bundle(\"${BUNDLE_PATH}\" \"\" \"\") - ") - add_custom_command(TARGET ${DOLPHIN_EXE} POST_BUILD - COMMAND ${CMAKE_COMMAND} -P postprocess_bundle.cmake - ) + if(NOT SKIP_POSTPROCESS_BUNDLE) + # Fix up the bundle after it is finished. + # There does not seem to be an easy way to run CMake commands post-build, + # so we invoke CMake again on a generated script. + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/postprocess_bundle.cmake " + include(BundleUtilities) + message(\"Fixing up application bundle: ${BUNDLE_PATH}\") + message(\"(Note: This is only necessary to produce a redistributable binary.\") + message(\"To skip, pass -DSKIP_POSTPROCESS_BUNDLE=1 to cmake.)\") + set(BU_CHMOD_BUNDLE_ITEMS ON) + fixup_bundle(\"${BUNDLE_PATH}\" \"\" \"\") + ") + add_custom_command(TARGET ${DOLPHIN_EXE} POST_BUILD + COMMAND ${CMAKE_COMMAND} -P postprocess_bundle.cmake + ) + endif() # Copy data files into application bundle. file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/copy_data_into_bundle.cmake " file(INSTALL ${CMAKE_SOURCE_DIR}/Data/Sys ${CMAKE_SOURCE_DIR}/Data/User DESTINATION ${BUNDLE_PATH}/Contents/Resources ) - file(GLOB TRANSLATION_FILES RELATIVE ${CMAKE_BINARY_DIR} - ${CMAKE_BINARY_DIR}/*.gmo - ) - foreach(TRANSLATION_FILE \${TRANSLATION_FILES}) - string(REPLACE \".gmo\" \".lproj\" TRANSLATION_DIR - \${TRANSLATION_FILE} - ) - # It would be better to copy to the new name as a single action, - # but I can't figure out a way to let CMake do that. - file(COPY ${CMAKE_BINARY_DIR}/\${TRANSLATION_FILE} - DESTINATION ${BUNDLE_PATH}/Contents/Resources/\${TRANSLATION_DIR} - NO_SOURCE_PERMISSIONS - ) - file(RENAME - ${BUNDLE_PATH}/Contents/Resources/\${TRANSLATION_DIR}/\${TRANSLATION_FILE} - ${BUNDLE_PATH}/Contents/Resources/\${TRANSLATION_DIR}/dolphin-emu.mo - ) - endforeach(TRANSLATION_FILE) + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/did_copy_data_into_bundle \"\") ") - add_custom_target(CopyDataIntoBundle ALL + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/did_copy_data_into_bundle COMMAND ${CMAKE_COMMAND} -P copy_data_into_bundle.cmake + DEPENDS ${CMAKE_SOURCE_DIR}/Data/Sys ${CMAKE_SOURCE_DIR}/Data/User VERBATIM ) + add_custom_target(CopyDataIntoBundle ALL + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/did_copy_data_into_bundle + ) + + if(GETTEXT_FOUND AND wxWidgets_FOUND) + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/copy_translations_into_bundle.cmake " + file(GLOB TRANSLATION_FILES RELATIVE ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}/*.gmo + ) + foreach(TRANSLATION_FILE \${TRANSLATION_FILES}) + string(REPLACE \".gmo\" \".lproj\" TRANSLATION_DIR + \${TRANSLATION_FILE} + ) + # It would be better to copy to the new name as a single action, + # but I can't figure out a way to let CMake do that. + file(COPY ${CMAKE_BINARY_DIR}/\${TRANSLATION_FILE} + DESTINATION ${BUNDLE_PATH}/Contents/Resources/\${TRANSLATION_DIR} + NO_SOURCE_PERMISSIONS + ) + file(RENAME + ${BUNDLE_PATH}/Contents/Resources/\${TRANSLATION_DIR}/\${TRANSLATION_FILE} + ${BUNDLE_PATH}/Contents/Resources/\${TRANSLATION_DIR}/dolphin-emu.mo + ) + endforeach(TRANSLATION_FILE) + ") + + file(GLOB PO_FILES RELATIVE ${CMAKE_SOURCE_DIR}/Languages/po + ${CMAKE_SOURCE_DIR}/Languages/po/*.po + ) + string(REPLACE .po .gmo GMO_FILES "${PO_FILES}") + + add_custom_command(OUTPUT ${BUNDLE_PATH}/Contents/Resources/en.lproj + COMMAND ${CMAKE_COMMAND} -P copy_translations_into_bundle.cmake + DEPENDS ${GMO_FILES} + ${CMAKE_SOURCE_DIR}/Data/Sys ${CMAKE_SOURCE_DIR}/Data/User + VERBATIM + ) + add_custom_target(CopyTranslationsIntoBundle ALL + DEPENDS ${BUNDLE_PATH}/Contents/Resources/en.lproj + ) + endif() # Install bundle into systemwide /Applications directory. install(DIRECTORY ${BUNDLE_PATH} DESTINATION /Applications