summaryrefslogtreecommitdiffstats
path: root/tools/qmake/mkspecs/features/functions.prf
blob: 80b64a653205ae75acb1ff4b8738df62299cd8a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
defineTest(isPlatformSupported) {
  static: return(false)
  !equals(QMAKE_HOST.arch, "x86_64"): return(false)
  osx:lessThan(QMAKE_XCODE_VERSION, 5.1): return(false)

  linux|win32-msvc2013|macx-clang: return(true)
  return(false)
}

# Map to the correct target type for gyp
defineReplace(toGypTargetType) {
  equals(TEMPLATE, "app"):return("executable")
  equals(TEMPLATE, "lib") {
    CONFIG(static): return("static_library")
    return("shared_library")
  }
  return("none")
}

defineReplace(getConfigDir) {
  win32:contains(QMAKE_TARGET.arch, x86_64) {
      CONFIG(release, debug|release):return("Release_x64")
      return("Debug_x64")
  }

  CONFIG(release, debug|release):return("Release")
  return("Debug")
}

defineReplace(getChromiumSrcDir) {
  git_chromium_src_dir = $$system("git config qtwebengine.chromiumsrcdir")
  # Fall back to the snapshot path if git does not know about chromium sources (i.e. init-repository.py has not been used)
  isEmpty(git_chromium_src_dir): git_chromium_src_dir = "src/3rdparty/chromium"
  return($$git_chromium_src_dir)
}

defineReplace(extractCFlag) {
    CFLAGS = $$QMAKE_CFLAGS
    !isEmpty(ANDROID_TARGET_CFLAGS): CFLAGS = $$ANDROID_TARGET_CFLAGS
    OPTION = $$find(CFLAGS, $$1)
    OPTION = $$split(OPTION, =)
    return ($$member(OPTION, 1))
}

defineReplace(findMocables) {
  input = $$1
  for (file, input): \
      infiles += $$absolute_path($$file, $$_PRO_FILE_PWD_)
  mocables = $$system("python $$QTWEBENGINE_ROOT/tools/buildscripts/find-mocables $$infiles")
  mocables = $$replace(mocables, $$_PRO_FILE_PWD_/, '')
  return($$mocables)
}

defineReplace(findIncludedMocFiles) {
  input = $$1
  for (file, input): \
      infiles += $$absolute_path($$file, $$_PRO_FILE_PWD_)
  return($$system("python $$QTWEBENGINE_ROOT/tools/buildscripts/find-included-moc-files $$infiles"))
}

defineReplace(mocOutput) {
  out = $$1
  # The order is important, since the output of the second replace would end up accidentaly transformed by the first one
  out = $$replace(out, ^(.*)($$join(QMAKE_EXT_CPP,|)), $${QMAKE_CPP_MOD_MOC}\\1$${QMAKE_EXT_CPP_MOC})
  out = $$replace(out, ^(.*)($$join(QMAKE_EXT_H,|)), $${QMAKE_H_MOD_MOC}\\1$${first(QMAKE_EXT_CPP)})
  return($$out)
}

defineReplace(rccOutput) {
  out = $$1
  out = $$replace(out, .qrc, .cpp)
  out = $$join(out, qrc_, qrc_)
  return($$out)
}

defineReplace(rccExternFunc) {
  out = $$1
  out = $$replace(out, .qrc, )
  return($$out)
}

defineReplace(which) {
  out = $$1
  win32 {
    command = $$split(out, " ")
    executable = $$first(command)
    # Return the first match only
    out = $$system("((for /f \"usebackq delims=\" %i in (`where $$executable 2^> NUL`) do @if not defined _endwhich (@echo %i & set _endwhich=true)) & set _endwhich=)")
    isEmpty(out) {
      message($$executable not found)
      out = $$executable
    }
    for(arg, command): !equals(arg, $$executable): out += $$arg
  } else:unix {
    command = $$split(out, " ")
    executable = $$first(command)
    out = $$system("which $$executable 2>/dev/null")
    isEmpty(out) {
      message($$executable not found)
      out = $$executable
    }
    for(arg, command): !equals(arg, $$executable): out += $$arg
  }
  return($$out)
}

defineReplace(findOrBuildNinja) {
    out = $$absolute_path("$${getChromiumSrcDir()}/../ninja/ninja", "$$QTWEBENGINE_ROOT")
    win32: out = $$system_path($${out}.exe)

    # If we did not find ninja, then we bootstrap it.
    !exists($$out): system("python $$dirname(out)/bootstrap.py")
    return($$out)
}