diff options
author | Jake Petroules <jake.petroules@theqtcompany.com> | 2016-04-06 20:37:44 -0700 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2016-04-14 21:28:54 +0000 |
commit | ab599a39313c22fd14cc5466cea5c61bbcdbba8e (patch) | |
tree | 4726e48dfc99f808e289e7e9d6e0b592599a5aec | |
parent | 62ad5abe0637abc742f10cc31a3faf0a2353ab2f (diff) |
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 <oswald.buddenhagen@theqtcompany.com>
Change-Id: Ia247674740bf450130a15db926df07fa9007e2ca
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | mkspecs/common/mac.conf | 3 | ||||
-rw-r--r-- | mkspecs/features/unix/separate_debug_info.prf | 80 | ||||
-rw-r--r-- | mkspecs/macx-clang-32/Info.plist.dSYM.in | 18 | ||||
-rw-r--r-- | mkspecs/macx-clang/Info.plist.dSYM.in | 18 | ||||
-rw-r--r-- | mkspecs/macx-g++-32/Info.plist.dSYM.in | 18 | ||||
-rw-r--r-- | mkspecs/macx-g++/Info.plist.dSYM.in | 18 | ||||
-rw-r--r-- | mkspecs/macx-g++40/Info.plist.dSYM.in | 18 | ||||
-rw-r--r-- | mkspecs/macx-g++42/Info.plist.dSYM.in | 18 | ||||
-rw-r--r-- | mkspecs/macx-icc/Info.plist.dSYM.in | 18 | ||||
-rw-r--r-- | mkspecs/macx-ios-clang/Info.plist.dSYM.in | 18 | ||||
-rw-r--r-- | mkspecs/macx-llvm/Info.plist.dSYM.in | 18 |
12 files changed, 230 insertions, 17 deletions
@@ -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 @@ +<?xml version=\"1.0\" encoding=\"UTF-8\"?> +<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"> +<plist version=\"1.0\"> + <dict> + <key>CFBundleIdentifier</key> + <string>com.apple.xcode.dsym.$${BUNDLEIDENTIFIER}</string> + <key>CFBundlePackageType</key> + <string>dSYM</string> + <key>CFBundleSignature</key> + <string>????</string> +!!IF !isEmpty(VERSION) + <key>CFBundleShortVersionString</key> + <string>$${VER_MAJ}.$${VER_MIN}</string> + <key>CFBundleVersion</key> + <string>$${VER_MAJ}.$${VER_MIN}.$${VER_PAT}</string> +!!ENDIF + </dict> +</plist> 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 @@ +<?xml version=\"1.0\" encoding=\"UTF-8\"?> +<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"> +<plist version=\"1.0\"> + <dict> + <key>CFBundleIdentifier</key> + <string>com.apple.xcode.dsym.$${BUNDLEIDENTIFIER}</string> + <key>CFBundlePackageType</key> + <string>dSYM</string> + <key>CFBundleSignature</key> + <string>????</string> +!!IF !isEmpty(VERSION) + <key>CFBundleShortVersionString</key> + <string>$${VER_MAJ}.$${VER_MIN}</string> + <key>CFBundleVersion</key> + <string>$${VER_MAJ}.$${VER_MIN}.$${VER_PAT}</string> +!!ENDIF + </dict> +</plist> 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 @@ +<?xml version=\"1.0\" encoding=\"UTF-8\"?> +<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"> +<plist version=\"1.0\"> + <dict> + <key>CFBundleIdentifier</key> + <string>com.apple.xcode.dsym.$${BUNDLEIDENTIFIER}</string> + <key>CFBundlePackageType</key> + <string>dSYM</string> + <key>CFBundleSignature</key> + <string>????</string> +!!IF !isEmpty(VERSION) + <key>CFBundleShortVersionString</key> + <string>$${VER_MAJ}.$${VER_MIN}</string> + <key>CFBundleVersion</key> + <string>$${VER_MAJ}.$${VER_MIN}.$${VER_PAT}</string> +!!ENDIF + </dict> +</plist> 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 @@ +<?xml version=\"1.0\" encoding=\"UTF-8\"?> +<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"> +<plist version=\"1.0\"> + <dict> + <key>CFBundleIdentifier</key> + <string>com.apple.xcode.dsym.$${BUNDLEIDENTIFIER}</string> + <key>CFBundlePackageType</key> + <string>dSYM</string> + <key>CFBundleSignature</key> + <string>????</string> +!!IF !isEmpty(VERSION) + <key>CFBundleShortVersionString</key> + <string>$${VER_MAJ}.$${VER_MIN}</string> + <key>CFBundleVersion</key> + <string>$${VER_MAJ}.$${VER_MIN}.$${VER_PAT}</string> +!!ENDIF + </dict> +</plist> 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 @@ +<?xml version=\"1.0\" encoding=\"UTF-8\"?> +<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"> +<plist version=\"1.0\"> + <dict> + <key>CFBundleIdentifier</key> + <string>com.apple.xcode.dsym.$${BUNDLEIDENTIFIER}</string> + <key>CFBundlePackageType</key> + <string>dSYM</string> + <key>CFBundleSignature</key> + <string>????</string> +!!IF !isEmpty(VERSION) + <key>CFBundleShortVersionString</key> + <string>$${VER_MAJ}.$${VER_MIN}</string> + <key>CFBundleVersion</key> + <string>$${VER_MAJ}.$${VER_MIN}.$${VER_PAT}</string> +!!ENDIF + </dict> +</plist> 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 @@ +<?xml version=\"1.0\" encoding=\"UTF-8\"?> +<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"> +<plist version=\"1.0\"> + <dict> + <key>CFBundleIdentifier</key> + <string>com.apple.xcode.dsym.$${BUNDLEIDENTIFIER}</string> + <key>CFBundlePackageType</key> + <string>dSYM</string> + <key>CFBundleSignature</key> + <string>????</string> +!!IF !isEmpty(VERSION) + <key>CFBundleShortVersionString</key> + <string>$${VER_MAJ}.$${VER_MIN}</string> + <key>CFBundleVersion</key> + <string>$${VER_MAJ}.$${VER_MIN}.$${VER_PAT}</string> +!!ENDIF + </dict> +</plist> 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 @@ +<?xml version=\"1.0\" encoding=\"UTF-8\"?> +<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"> +<plist version=\"1.0\"> + <dict> + <key>CFBundleIdentifier</key> + <string>com.apple.xcode.dsym.$${BUNDLEIDENTIFIER}</string> + <key>CFBundlePackageType</key> + <string>dSYM</string> + <key>CFBundleSignature</key> + <string>????</string> +!!IF !isEmpty(VERSION) + <key>CFBundleShortVersionString</key> + <string>$${VER_MAJ}.$${VER_MIN}</string> + <key>CFBundleVersion</key> + <string>$${VER_MAJ}.$${VER_MIN}.$${VER_PAT}</string> +!!ENDIF + </dict> +</plist> 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 @@ +<?xml version=\"1.0\" encoding=\"UTF-8\"?> +<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"> +<plist version=\"1.0\"> + <dict> + <key>CFBundleIdentifier</key> + <string>com.apple.xcode.dsym.$${BUNDLEIDENTIFIER}</string> + <key>CFBundlePackageType</key> + <string>dSYM</string> + <key>CFBundleSignature</key> + <string>????</string> +!!IF !isEmpty(VERSION) + <key>CFBundleShortVersionString</key> + <string>$${VER_MAJ}.$${VER_MIN}</string> + <key>CFBundleVersion</key> + <string>$${VER_MAJ}.$${VER_MIN}.$${VER_PAT}</string> +!!ENDIF + </dict> +</plist> 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 @@ +<?xml version=\"1.0\" encoding=\"UTF-8\"?> +<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"> +<plist version=\"1.0\"> + <dict> + <key>CFBundleIdentifier</key> + <string>com.apple.xcode.dsym.$${BUNDLEIDENTIFIER}</string> + <key>CFBundlePackageType</key> + <string>dSYM</string> + <key>CFBundleSignature</key> + <string>????</string> +!!IF !isEmpty(VERSION) + <key>CFBundleShortVersionString</key> + <string>$${VER_MAJ}.$${VER_MIN}</string> + <key>CFBundleVersion</key> + <string>$${VER_MAJ}.$${VER_MIN}.$${VER_PAT}</string> +!!ENDIF + </dict> +</plist> |