include($$QTWEBENGINE_ROOT/src/buildtools/config/support.pri)

defineReplace(getConfigDir) {
  CONFIG(release, debug|release):return("release")
  return("debug")
}

defineReplace(getChromiumSrcDir) {
  exists($$QTWEBENGINE_ROOT/.git): 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(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)
}

# Returns the unquoted path to the python executable.
defineReplace(pythonPath) {
    isEmpty(QMAKE_PYTHON2) {
        # Fallback for building QtWebEngine with Qt < 5.8
        QMAKE_PYTHON2 = python
    }
    return($$QMAKE_PYTHON2)
}

# Returns the python executable for use with shell / make targets.
defineReplace(pythonPathForShell) {
    return($$shell_quote($$shell_path($$pythonPath())))
}

# Returns the python executable for use with $$system()
defineReplace(pythonPathForSystem) {
    return($$system_quote($$system_path($$pythonPath())))
}

defineReplace(ninjaPath) {
    src_3rd_party_dir = $$absolute_path("$${getChromiumSrcDir()}/../", "$$QTWEBENGINE_ROOT")
    out = $$shadowed($$absolute_path(ninja/ninja, $$src_3rd_party_dir))
    win32: out = $${out}.exe
    return($$out)
}

defineReplace(gnPath) {
    src_3rd_party_dir = $$absolute_path("$${getChromiumSrcDir()}/../", "$$QTWEBENGINE_ROOT")
    out = $$shadowed($$absolute_path(gn/out/Release/gn, $$src_3rd_party_dir))

    win32: out = $${out}.exe
    return($$out)
}

defineReplace(gnArgs) {
    linux: include($$QTWEBENGINE_ROOT/src/buildtools/config/linux.pri)
    macos: include($$QTWEBENGINE_ROOT/src/buildtools/config/mac_osx.pri)
    win32: include($$QTWEBENGINE_ROOT/src/buildtools/config/windows.pri)
    isEmpty(gn_args): error(No gn_args found please make sure you have valid configuration.)
    return($$gn_args)
}

defineReplace(gnArch) {
    qtArch = $$1
    contains(qtArch, "i386"): return(x86)
    contains(qtArch, "x86_64"): return(x64)
    contains(qtArch, "arm"): return(arm)
    contains(qtArch, "arm64"): return(arm64)
    contains(qtArch, "mips"): return(mipsel)
    contains(qtArch, "mips64"): return(mips64el)
    return(unknown)
}

defineReplace(gnOS) {
    macos: return(mac)
    win32: return(win)
    linux: return(linux)
    error(Unsupported platform)
    return(unknown)
}

defineReplace(pkgConfigHostExecutable) {
    wrapper_name = $$OUT_PWD/pkg-config-host_wrapper.sh
    wrapper_cmd = $$QMAKE_PKG_CONFIG_HOST
    isEmpty(wrapper_cmd): wrapper_cmd = pkg-config
    wrapper_content = \
        "$$LITERAL_HASH!/bin/sh" \
        "unset PKG_CONFIG_LIBDIR" \
        "unset PKG_CONFIG_SYSROOT_DIR" \
        "exec $$wrapper_cmd \"$@\""
    !build_pass:!write_file($$wrapper_name, wrapper_content, exe): error()
    QMAKE_DISTCLEAN += $$wrapper_name
    export(QMAKE_DISTCLEAN)
    return($$system_quote($$system_path($$wrapper_name)))
}

