diff options
Diffstat (limited to 'src/qtvstools.core/QtConfig.cs')
-rw-r--r-- | src/qtvstools.core/QtConfig.cs | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/qtvstools.core/QtConfig.cs b/src/qtvstools.core/QtConfig.cs new file mode 100644 index 00000000..ad388b80 --- /dev/null +++ b/src/qtvstools.core/QtConfig.cs @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt VS Tools. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +using System; +using System.IO; +using System.Text.RegularExpressions; + +namespace QtVsTools.Core +{ + enum BuildType { + Unknown, + Static, + Shared + } + + /// <summary> + /// A very simple reader for the qconfig.pri file. + /// </summary> + class QtConfig + { + public BuildType BuildType { get; private set; } + + public string LibInfix { get; private set; } + + public bool Is64Bit { get; private set; } + + public string Namespace { get; private set; } + + public uint VersionMajor { get; private set; } + public uint VersionMinor { get; private set; } + public uint VersionPatch { get; private set; } + + public QtConfig(string qtdir) + { + LibInfix = string.Empty; + + var fi = new FileInfo(qtdir + "\\mkspecs\\qconfig.pri"); + if (!fi.Exists) + fi = new FileInfo(qtdir + "\\..\\mkspecs\\qconfig.pri"); + if (!fi.Exists) + return; + + var qConfig = File.ReadAllText(fi.FullName); + + var variableDef = new Regex(@"(\w+)\s*\{|(\})|([\w\.]+)\s*([\+\-]?\=)(.*)\n"); + var lastBlock = string.Empty; + bool inBlock = false; + foreach (Match match in variableDef.Matches(qConfig)) { + var block = match.Groups[1].Value; + var blockEnd = match.Groups[2].Value; + var name = match.Groups[3].Value; + var oper = match.Groups[4].Value; + var data = match.Groups[5].Value; + + if (!string.IsNullOrEmpty(block)) { + inBlock = true; + if (block == "else" && !string.IsNullOrEmpty(lastBlock)) + lastBlock = "!" + lastBlock; + else + lastBlock = block; + } else if (!string.IsNullOrEmpty(blockEnd)) { + inBlock = false; + if (lastBlock.StartsWith("!")) + lastBlock = ""; + } else if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(data) + && (!inBlock || lastBlock == "!host_build")) { + + data = data.Replace("\r", "").Trim(); + if (name == "CONFIG") { + var values = data.Split(new char[] { ' ', '\t' }, + StringSplitOptions.RemoveEmptyEntries); + foreach (var value in values) { + if (value == "static") { + BuildType = BuildType.Static; + break; + } else if (value == "shared") { + BuildType = BuildType.Shared; + break; + } + } + } else if (name == "QT_LIBINFIX") { + LibInfix = data; + } else if (name == "QT_ARCH") { + Is64Bit = (data == "x86_64"); + } else if (name == "QT_NAMESPACE") { + Namespace = data; + } else if (name == "QT_MAJOR_VERSION") { + if (uint.TryParse(data, out uint versionMajor)) + VersionMajor = versionMajor; + } else if (name == "QT_MINOR_VERSION") { + if (uint.TryParse(data, out uint versionMinor)) + VersionMinor = versionMinor; + } else if (name == "QT_PATCH_VERSION") { + if (uint.TryParse(data, out uint versionPatch)) + VersionPatch = versionPatch; + } + } + } + } + } +} |