diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2017-04-13 14:49:51 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2017-04-28 10:53:25 +0000 |
commit | 4abd9df38adc6e324472730413885c0a194a499c (patch) | |
tree | 45fb2a662abe0c1b32ad379e775a01990db94425 | |
parent | fb27768c3aef57c00a5bd7d8948ae7ef21c92046 (diff) |
Allow specification of elfutils install dir
Link against elfutils in that directory, and copy files from there in
the deploy step. Also, drop the windows specific library naming dance as
we are never going to build the bundled elfutils on windows.
Change-Id: Ia1dd2583856918b2c2623016f6ed7a80c0c7ef07
Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
-rw-r--r-- | app/app.pro | 21 | ||||
-rw-r--r-- | paths.pri | 12 | ||||
-rw-r--r-- | perfparser.pro | 41 |
3 files changed, 56 insertions, 18 deletions
diff --git a/app/app.pro b/app/app.pro index f2f0b45..039c32c 100644 --- a/app/app.pro +++ b/app/app.pro @@ -11,12 +11,8 @@ CONFIG -= app_bundle include(../paths.pri) !isEmpty(PERFPARSER_BUNDLED_ELFUTILS) { - linux-* { - RPATH = $$relative_path($$PERFPARSER_ELFUTILS_INSTALLDIR, $$PERFPARSER_APP_INSTALLDIR) - QMAKE_LFLAGS += -Wl,-z,origin \'-Wl,-rpath,\$\$ORIGIN/$$RPATH\' - } - LIBS += -L$$PERFPARSER_ELFUTILS_DESTDIR + LIBS += -l$$libraryName(dw) -l$$libraryName(elf) include(../3rdparty/elfutils/libdwfl/dwflheaders.pri) include(../3rdparty/elfutils/libelf/elfheaders.pri) @@ -25,11 +21,20 @@ include(../paths.pri) include(../3rdparty/elfutils/libdwelf/dwelfheaders.pri) include(../3rdparty/elfutils/lib/libheaders.pri) } else { - INCLUDEPATH += /usr/include/elfutils + !isEmpty(ELFUTILS_INSTALL_DIR) { + INCLUDEPATH += $$ELFUTILS_INSTALL_DIR/include $$ELFUTILS_INSTALL_DIR/include/elfutils + LIBS += -L$$ELFUTILS_INSTALL_DIR/lib + } else:unix { + INCLUDEPATH += /usr/include/elfutils + } + + LIBS += -ldw -lelf } -# We require major version 0 from elfutils -LIBS += -l$$libraryRefName(dw, 0) -l$$libraryRefName(elf, 0) +linux-g++*:!isEmpty(PERFPARSER_ELFUTILS_INSTALLDIR) { + RPATH = $$relative_path($$PERFPARSER_ELFUTILS_INSTALLDIR, $$PERFPARSER_APP_INSTALLDIR) + QMAKE_LFLAGS += -Wl,-z,origin \'-Wl,-rpath,\$\$ORIGIN/$$RPATH\' +} DESTDIR = $$PERFPARSER_APP_DESTDIR target.path = $$PERFPARSER_APP_INSTALLDIR @@ -14,17 +14,11 @@ isEmpty(PERFPARSER_ELFUTILS_BACKENDS_INSTALLDIR) { PERFPARSER_ELFUTILS_BACKENDS_INSTALLDIR = $$PERFPARSER_ELFUTILS_INSTALLDIR/elfutils } -defineReplace(libraryName) { - RET = $$1$$qtPlatformTargetSuffix() - win32 { - VERSION_LIST = $$split(VERSION, .) - RET = $$RET$$first(VERSION_LIST) - } - return($$RET) +isEmpty(PERFPARSER_ELFUTILS_BACKENDS_INSTALLDIR):!isEmpty(PERFPARSER_ELFUTILS_INSTALLDIR) { + PERFPARSER_ELFUTILS_BACKENDS_INSTALLDIR = $$PERFPARSER_ELFUTILS_INSTALLDIR/elfutils } -defineReplace(libraryRefName) { +defineReplace(libraryName) { RET = $$1$$qtPlatformTargetSuffix() - win32: RET = $$RET$$2 return($$RET) } diff --git a/perfparser.pro b/perfparser.pro index 92b600b..f37a0fe 100644 --- a/perfparser.pro +++ b/perfparser.pro @@ -1,12 +1,51 @@ TEMPLATE = subdirs SUBDIRS = app +include (paths.pri) + +defineReplace(elfutilsLibraryName) { + RET = $$1 + linux: RET = lib$${RET}.so.$$2 + macos: RET = lib$${RET}.dylib + win32: RET = $${RET}.dll + return($$RET) +} + !isEmpty(BUILD_TESTS): SUBDIRS += tests !isEmpty(PERFPARSER_BUNDLED_ELFUTILS) { SUBDIRS += 3rdparty/elfutils app.depends = 3rdparty/elfutils !isEmpty(BUILD_TESTS): tests.depends = 3rdparty/elfutils +} else:!isEmpty(PERFPARSER_ELFUTILS_INSTALLDIR) { + unix:isEmpty(ELFUTILS_INSTALL_DIR): ELFUTILS_INSTALL_DIR = /usr + + inst_elfutils.files = \ + $$ELFUTILS_INSTALL_DIR/lib/$$elfutilsLibraryName(elf, 1) \ + $$ELFUTILS_INSTALL_DIR/lib/$$elfutilsLibraryName(dw, 1) + + inst_elfutils.path = $$PERFPARSER_ELFUTILS_INSTALLDIR + inst_elfutils.CONFIG += no_check_exist no_default_install + + # only deploy the non-versioned backends. We are never dlopen'ing the versioned ones anyway. + inst_backends.files = $$files($$ELFUTILS_INSTALL_DIR/lib/elfutils/*ebl_*.*) + inst_backends.files -= $$files($$ELFUTILS_INSTALL_DIR/lib/elfutils/*ebl_*-*.*.*) + inst_backends.path = $$PERFPARSER_ELFUTILS_BACKENDS_INSTALLDIR + inst_backends.CONFIG += no_check_exist no_default_install + + INSTALLS += inst_backends inst_elfutils + + deploy.depends = install_inst_elfutils install_inst_backends + + linux { + RPATH = $$relative_path($$PERFPARSER_ELFUTILS_BACKENDS_INSTALLDIR, \ + $$PERFPARSER_ELFUTILS_INSTALLDIR) + fix_dw_rpath.commands = chrpath -r \'\$\$ORIGIN/$$RPATH\' \ + $$PERFPARSER_ELFUTILS_INSTALLDIR/$$elfutilsLibraryName(dw, 1) + fix_dw_rpath.depends = install_inst_elfutils + deploy.depends += fix_dw_rpath + QMAKE_EXTRA_TARGETS += fix_dw_rpath install_inst_elfutils + } } -QMAKE_EXTRA_TARGETS = docs install_docs # dummy targets for consistency +QMAKE_EXTRA_TARGETS += deploy docs install_docs |