From ab599a39313c22fd14cc5466cea5c61bbcdbba8e Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Wed, 6 Apr 2016 20:37:44 -0700 Subject: qmake: Add support for separate debug info on Apple platforms. This makes the -separate-debug-info configure optional functional, which generates dSYM debug info bundles for Qt libraries on Apple platforms. Task-number: QTBUG-37952 Done-with: Oswald Buddenhagen Change-Id: Ia247674740bf450130a15db926df07fa9007e2ca Reviewed-by: Oswald Buddenhagen --- configure | 2 +- mkspecs/common/mac.conf | 3 + mkspecs/features/unix/separate_debug_info.prf | 80 +++++++++++++++++++++------ mkspecs/macx-clang-32/Info.plist.dSYM.in | 18 ++++++ mkspecs/macx-clang/Info.plist.dSYM.in | 18 ++++++ mkspecs/macx-g++-32/Info.plist.dSYM.in | 18 ++++++ mkspecs/macx-g++/Info.plist.dSYM.in | 18 ++++++ mkspecs/macx-g++40/Info.plist.dSYM.in | 18 ++++++ mkspecs/macx-g++42/Info.plist.dSYM.in | 18 ++++++ mkspecs/macx-icc/Info.plist.dSYM.in | 18 ++++++ mkspecs/macx-ios-clang/Info.plist.dSYM.in | 18 ++++++ mkspecs/macx-llvm/Info.plist.dSYM.in | 18 ++++++ 12 files changed, 230 insertions(+), 17 deletions(-) create mode 100644 mkspecs/macx-clang-32/Info.plist.dSYM.in create mode 100644 mkspecs/macx-clang/Info.plist.dSYM.in create mode 100644 mkspecs/macx-g++-32/Info.plist.dSYM.in create mode 100644 mkspecs/macx-g++/Info.plist.dSYM.in create mode 100644 mkspecs/macx-g++40/Info.plist.dSYM.in create mode 100644 mkspecs/macx-g++42/Info.plist.dSYM.in create mode 100644 mkspecs/macx-icc/Info.plist.dSYM.in create mode 100644 mkspecs/macx-ios-clang/Info.plist.dSYM.in create mode 100644 mkspecs/macx-llvm/Info.plist.dSYM.in diff --git a/configure b/configure index 1cafa98c3b..3e97c98e1a 100755 --- a/configure +++ b/configure @@ -4362,7 +4362,7 @@ fi #------------------------------------------------------------------------------- # Detect objcopy support -if [ "$CFG_SEPARATE_DEBUG_INFO" = "yes" ]; then +if [ "$XPLATFORM_MAC" = "no" ] && [ "$CFG_SEPARATE_DEBUG_INFO" = "yes" ]; then if ! compileTest unix/objcopy "objcopy"; then echo "ERROR: -separate-debug-info was requested but this binutils does not support it." echo "Re-run configure with -v for more information" diff --git a/mkspecs/common/mac.conf b/mkspecs/common/mac.conf index ad3c638a6f..aac9d1b3d7 100644 --- a/mkspecs/common/mac.conf +++ b/mkspecs/common/mac.conf @@ -29,6 +29,9 @@ QMAKE_LIBS_DYNLOAD = QMAKE_LIBS_OPENGL = -framework OpenGL -framework AGL QMAKE_LIBS_THREAD = +QMAKE_DSYMUTIL = dsymutil +QMAKE_STRIP = strip + QMAKE_AR = ar cq QMAKE_RANLIB = ranlib -s QMAKE_NM = nm -P diff --git a/mkspecs/features/unix/separate_debug_info.prf b/mkspecs/features/unix/separate_debug_info.prf index 7d9022f8d7..460ad63e22 100644 --- a/mkspecs/features/unix/separate_debug_info.prf +++ b/mkspecs/features/unix/separate_debug_info.prf @@ -1,29 +1,77 @@ - -have_target:!static:!isEmpty(QMAKE_OBJCOPY) { - qnx { - debug_info_suffix = sym - debug_info_keep = --keep-file-symbols - debug_info_strip = --strip-debug -R.ident +have_target:!static:if(darwin|!isEmpty(QMAKE_OBJCOPY)) { + darwin { + debug_info_copy_bin = $$QMAKE_DSYMUTIL + debug_info_strip_bin = $$QMAKE_STRIP + debug_info_suffix = dSYM + debug_info_out = --flat -o + debug_info_strip = -S } else { - debug_info_suffix = debug - debug_info_keep = --only-keep-debug - debug_info_strip = --strip-debug + debug_info_copy_bin = $$QMAKE_OBJCOPY + debug_info_strip_bin = $$QMAKE_OBJCOPY + qnx { + debug_info_suffix = sym + debug_info_keep = --keep-file-symbols + debug_info_strip = --strip-debug -R.ident + } else { + debug_info_suffix = debug + debug_info_keep = --only-keep-debug + debug_info_strip = --strip-debug + } } load(resolve_target) - QMAKE_TARGET_DEBUG_INFO = $${QMAKE_RESOLVED_TARGET}.$$debug_info_suffix + debug_info_target = $$QMAKE_RESOLVED_TARGET + + darwin { + !isEmpty(QMAKE_RESOLVED_BUNDLE) { + debug_info_target = $$QMAKE_RESOLVED_BUNDLE + CONFIG += any_bundle + } + + debug_info_target_dir = $${debug_info_target}.$$debug_info_suffix/Contents/Resources/DWARF + !isEmpty(QMAKE_RESOLVED_BUNDLE): \ + QMAKE_TARGET_DEBUG_INFO = $$debug_info_target_dir/$$TARGET + else: \ + QMAKE_TARGET_DEBUG_INFO = $$debug_info_target_dir/$$section(QMAKE_RESOLVED_TARGET, /, -1, -1) + + if(any_bundle:!build_pass)|if(!any_bundle:if(build_pass|isEmpty(BUILDS))) { + equals(TEMPLATE, lib):lib_bundle:!isEmpty(QMAKE_FRAMEWORK_BUNDLE_NAME): \ + BUNDLEIDENTIFIER = $$replace(QMAKE_FRAMEWORK_BUNDLE_NAME, \\.framework$, ) + else: equals(TEMPLATE, app):app_bundle:!isEmpty(QMAKE_APPLICATION_BUNDLE_NAME): \ + BUNDLEIDENTIFIER = $$replace(QMAKE_APPLICATION_BUNDLE_NAME, \\.app$, ) + else: \ + BUNDLEIDENTIFIER = $${TARGET} + + !isEmpty(QMAKE_TARGET_BUNDLE_PREFIX): \ + BUNDLEIDENTIFIER = $$replace(QMAKE_TARGET_BUNDLE_PREFIX, \\.$, ).$${BUNDLEIDENTIFIER} + else: \ + BUNDLEIDENTIFIER = com.yourcompany.$${BUNDLEIDENTIFIER} + + BUNDLEIDENTIFIER ~= s,_,-, + + debug_info_plist.input = $$QMAKESPEC/Info.plist.dSYM.in + debug_info_plist.output = $${debug_info_target}.$$debug_info_suffix/Contents/Info.plist + QMAKE_SUBSTITUTES += debug_info_plist + } + } else { + QMAKE_TARGET_DEBUG_INFO = $${QMAKE_RESOLVED_TARGET}.$$debug_info_suffix + } shell_target = $$shell_quote($$relative_path($$QMAKE_RESOLVED_TARGET, $$OUT_PWD)) shell_target_debug_info = $$shell_quote($$relative_path($$QMAKE_TARGET_DEBUG_INFO, $$OUT_PWD)) - copy_debug_info = $$QMAKE_OBJCOPY $$debug_info_keep $$shell_target $$shell_target_debug_info - strip_debug_info = $$QMAKE_OBJCOPY $$debug_info_strip $$shell_target - link_debug_info = $$QMAKE_OBJCOPY --add-gnu-debuglink=$$shell_target_debug_info $$shell_target - chmod_debug_info = chmod -x $$shell_target_debug_info + copy_debug_info = $$debug_info_copy_bin $$debug_info_keep $$shell_target $$debug_info_out $$shell_target_debug_info + strip_debug_info = $$debug_info_strip_bin $$debug_info_strip $$shell_target !isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$escape_expand(\\n\\t)$$QMAKE_POST_LINK - QMAKE_POST_LINK = $$copy_debug_info && $$strip_debug_info && $$link_debug_info && $$chmod_debug_info $$QMAKE_POST_LINK + darwin { + mkdir_debug_info = $$QMAKE_MKDIR $$shell_quote($$debug_info_target_dir) + QMAKE_POST_LINK = $$mkdir_debug_info && $$copy_debug_info && $$strip_debug_info $$QMAKE_POST_LINK + } else { + link_debug_info = $$QMAKE_OBJCOPY --add-gnu-debuglink=$$shell_target_debug_info $$shell_target + chmod_debug_info = chmod -x $$shell_target_debug_info + QMAKE_POST_LINK = $$copy_debug_info && $$strip_debug_info && $$link_debug_info && $$chmod_debug_info $$QMAKE_POST_LINK + } silent:QMAKE_POST_LINK = @echo creating $@.$$debug_info_suffix && $$QMAKE_POST_LINK target.targets += $$QMAKE_TARGET_DEBUG_INFO QMAKE_DISTCLEAN += $$QMAKE_TARGET_DEBUG_INFO } - diff --git a/mkspecs/macx-clang-32/Info.plist.dSYM.in b/mkspecs/macx-clang-32/Info.plist.dSYM.in new file mode 100644 index 0000000000..a8c8d0d4fb --- /dev/null +++ b/mkspecs/macx-clang-32/Info.plist.dSYM.in @@ -0,0 +1,18 @@ + + + + + CFBundleIdentifier + com.apple.xcode.dsym.$${BUNDLEIDENTIFIER} + CFBundlePackageType + dSYM + CFBundleSignature + ???? +!!IF !isEmpty(VERSION) + CFBundleShortVersionString + $${VER_MAJ}.$${VER_MIN} + CFBundleVersion + $${VER_MAJ}.$${VER_MIN}.$${VER_PAT} +!!ENDIF + + diff --git a/mkspecs/macx-clang/Info.plist.dSYM.in b/mkspecs/macx-clang/Info.plist.dSYM.in new file mode 100644 index 0000000000..a8c8d0d4fb --- /dev/null +++ b/mkspecs/macx-clang/Info.plist.dSYM.in @@ -0,0 +1,18 @@ + + + + + CFBundleIdentifier + com.apple.xcode.dsym.$${BUNDLEIDENTIFIER} + CFBundlePackageType + dSYM + CFBundleSignature + ???? +!!IF !isEmpty(VERSION) + CFBundleShortVersionString + $${VER_MAJ}.$${VER_MIN} + CFBundleVersion + $${VER_MAJ}.$${VER_MIN}.$${VER_PAT} +!!ENDIF + + diff --git a/mkspecs/macx-g++-32/Info.plist.dSYM.in b/mkspecs/macx-g++-32/Info.plist.dSYM.in new file mode 100644 index 0000000000..a8c8d0d4fb --- /dev/null +++ b/mkspecs/macx-g++-32/Info.plist.dSYM.in @@ -0,0 +1,18 @@ + + + + + CFBundleIdentifier + com.apple.xcode.dsym.$${BUNDLEIDENTIFIER} + CFBundlePackageType + dSYM + CFBundleSignature + ???? +!!IF !isEmpty(VERSION) + CFBundleShortVersionString + $${VER_MAJ}.$${VER_MIN} + CFBundleVersion + $${VER_MAJ}.$${VER_MIN}.$${VER_PAT} +!!ENDIF + + diff --git a/mkspecs/macx-g++/Info.plist.dSYM.in b/mkspecs/macx-g++/Info.plist.dSYM.in new file mode 100644 index 0000000000..a8c8d0d4fb --- /dev/null +++ b/mkspecs/macx-g++/Info.plist.dSYM.in @@ -0,0 +1,18 @@ + + + + + CFBundleIdentifier + com.apple.xcode.dsym.$${BUNDLEIDENTIFIER} + CFBundlePackageType + dSYM + CFBundleSignature + ???? +!!IF !isEmpty(VERSION) + CFBundleShortVersionString + $${VER_MAJ}.$${VER_MIN} + CFBundleVersion + $${VER_MAJ}.$${VER_MIN}.$${VER_PAT} +!!ENDIF + + diff --git a/mkspecs/macx-g++40/Info.plist.dSYM.in b/mkspecs/macx-g++40/Info.plist.dSYM.in new file mode 100644 index 0000000000..a8c8d0d4fb --- /dev/null +++ b/mkspecs/macx-g++40/Info.plist.dSYM.in @@ -0,0 +1,18 @@ + + + + + CFBundleIdentifier + com.apple.xcode.dsym.$${BUNDLEIDENTIFIER} + CFBundlePackageType + dSYM + CFBundleSignature + ???? +!!IF !isEmpty(VERSION) + CFBundleShortVersionString + $${VER_MAJ}.$${VER_MIN} + CFBundleVersion + $${VER_MAJ}.$${VER_MIN}.$${VER_PAT} +!!ENDIF + + diff --git a/mkspecs/macx-g++42/Info.plist.dSYM.in b/mkspecs/macx-g++42/Info.plist.dSYM.in new file mode 100644 index 0000000000..a8c8d0d4fb --- /dev/null +++ b/mkspecs/macx-g++42/Info.plist.dSYM.in @@ -0,0 +1,18 @@ + + + + + CFBundleIdentifier + com.apple.xcode.dsym.$${BUNDLEIDENTIFIER} + CFBundlePackageType + dSYM + CFBundleSignature + ???? +!!IF !isEmpty(VERSION) + CFBundleShortVersionString + $${VER_MAJ}.$${VER_MIN} + CFBundleVersion + $${VER_MAJ}.$${VER_MIN}.$${VER_PAT} +!!ENDIF + + diff --git a/mkspecs/macx-icc/Info.plist.dSYM.in b/mkspecs/macx-icc/Info.plist.dSYM.in new file mode 100644 index 0000000000..a8c8d0d4fb --- /dev/null +++ b/mkspecs/macx-icc/Info.plist.dSYM.in @@ -0,0 +1,18 @@ + + + + + CFBundleIdentifier + com.apple.xcode.dsym.$${BUNDLEIDENTIFIER} + CFBundlePackageType + dSYM + CFBundleSignature + ???? +!!IF !isEmpty(VERSION) + CFBundleShortVersionString + $${VER_MAJ}.$${VER_MIN} + CFBundleVersion + $${VER_MAJ}.$${VER_MIN}.$${VER_PAT} +!!ENDIF + + diff --git a/mkspecs/macx-ios-clang/Info.plist.dSYM.in b/mkspecs/macx-ios-clang/Info.plist.dSYM.in new file mode 100644 index 0000000000..a8c8d0d4fb --- /dev/null +++ b/mkspecs/macx-ios-clang/Info.plist.dSYM.in @@ -0,0 +1,18 @@ + + + + + CFBundleIdentifier + com.apple.xcode.dsym.$${BUNDLEIDENTIFIER} + CFBundlePackageType + dSYM + CFBundleSignature + ???? +!!IF !isEmpty(VERSION) + CFBundleShortVersionString + $${VER_MAJ}.$${VER_MIN} + CFBundleVersion + $${VER_MAJ}.$${VER_MIN}.$${VER_PAT} +!!ENDIF + + diff --git a/mkspecs/macx-llvm/Info.plist.dSYM.in b/mkspecs/macx-llvm/Info.plist.dSYM.in new file mode 100644 index 0000000000..a8c8d0d4fb --- /dev/null +++ b/mkspecs/macx-llvm/Info.plist.dSYM.in @@ -0,0 +1,18 @@ + + + + + CFBundleIdentifier + com.apple.xcode.dsym.$${BUNDLEIDENTIFIER} + CFBundlePackageType + dSYM + CFBundleSignature + ???? +!!IF !isEmpty(VERSION) + CFBundleShortVersionString + $${VER_MAJ}.$${VER_MIN} + CFBundleVersion + $${VER_MAJ}.$${VER_MIN}.$${VER_PAT} +!!ENDIF + + -- cgit v1.2.3