aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/language
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2014-07-14 17:04:30 +0200
committerJoerg Bornemann <joerg.bornemann@digia.com>2014-07-16 11:56:44 +0200
commitf7973489aef74b1df55f7466cd176e14bbfa76d0 (patch)
treeb9be29a1a857082768a341a87081affdfd99cf36 /src/lib/corelib/language
parenta623153d2b1af3490bab8885f0b3b768511cb42f (diff)
deprecate Artifact.fileName in favor of Artifact.filePath
This property is actually a file path, not a mere name. Task-number: QBS-579 Change-Id: I04e8f03eac97b5f86fe743a4923888a3d2a82c5d Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/lib/corelib/language')
-rw-r--r--src/lib/corelib/language/builtindeclarations.cpp2
-rw-r--r--src/lib/corelib/language/language.cpp6
-rw-r--r--src/lib/corelib/language/language.h2
-rw-r--r--src/lib/corelib/language/projectresolver.cpp51
-rw-r--r--src/lib/corelib/language/projectresolver.h4
5 files changed, 53 insertions, 12 deletions
diff --git a/src/lib/corelib/language/builtindeclarations.cpp b/src/lib/corelib/language/builtindeclarations.cpp
index 2f97d7158..85eedf843 100644
--- a/src/lib/corelib/language/builtindeclarations.cpp
+++ b/src/lib/corelib/language/builtindeclarations.cpp
@@ -129,7 +129,9 @@ void BuiltinDeclarations::addArtifactItem()
{
ItemDeclaration item(QLatin1String("Artifact"));
item << conditionProperty();
+ // ### remove Artifact.fileName in qbs 1.4
item << PropertyDeclaration(QLatin1String("fileName"), PropertyDeclaration::Verbatim);
+ item << PropertyDeclaration(QLatin1String("filePath"), PropertyDeclaration::Verbatim);
item << PropertyDeclaration(QLatin1String("fileTags"), PropertyDeclaration::Variant);
PropertyDeclaration decl(QLatin1String("alwaysUpdated"), PropertyDeclaration::Boolean);
decl.setInitialValueSource(QLatin1String("true"));
diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp
index d7815938e..6b90011d3 100644
--- a/src/lib/corelib/language/language.cpp
+++ b/src/lib/corelib/language/language.cpp
@@ -202,7 +202,7 @@ void ResolvedGroup::store(PersistentPool &pool) const
void RuleArtifact::load(PersistentPool &pool)
{
pool.stream()
- >> fileName
+ >> filePath
>> fileTags
>> alwaysUpdated
>> location;
@@ -221,7 +221,7 @@ void RuleArtifact::load(PersistentPool &pool)
void RuleArtifact::store(PersistentPool &pool) const
{
pool.stream()
- << fileName
+ << filePath
<< fileTags
<< alwaysUpdated
<< location;
@@ -1281,7 +1281,7 @@ bool operator==(const RuleArtifact &a1, const RuleArtifact &a2)
return true;
if (!&a1 != !&a2)
return false;
- return a1.fileName == a2.fileName
+ return a1.filePath == a2.filePath
&& a1.fileTags == a2.fileTags
&& a1.alwaysUpdated == a2.alwaysUpdated
&& a1.bindings.toList().toSet() == a2.bindings.toList().toSet();
diff --git a/src/lib/corelib/language/language.h b/src/lib/corelib/language/language.h
index e7df3232e..bff76aab8 100644
--- a/src/lib/corelib/language/language.h
+++ b/src/lib/corelib/language/language.h
@@ -94,7 +94,7 @@ class RuleArtifact : public PersistentObject
public:
static RuleArtifactPtr create() { return RuleArtifactPtr(new RuleArtifact); }
- QString fileName;
+ QString filePath;
FileTags fileTags;
bool alwaysUpdated;
CodeLocation location;
diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp
index 9f7f5fb78..a30422cf8 100644
--- a/src/lib/corelib/language/projectresolver.cpp
+++ b/src/lib/corelib/language/projectresolver.cpp
@@ -129,19 +129,24 @@ void ProjectResolver::checkCancelation() const
}
}
-QString ProjectResolver::verbatimValue(const ValueConstPtr &value) const
+QString ProjectResolver::verbatimValue(const ValueConstPtr &value, bool *propertyWasSet) const
{
QString result;
if (value && value->type() == Value::JSSourceValueType) {
const JSSourceValueConstPtr sourceValue = value.staticCast<const JSSourceValue>();
result = sourceValue->sourceCodeForEvaluation();
+ if (propertyWasSet)
+ *propertyWasSet = (result != QLatin1String("undefined"));
+ } else {
+ if (propertyWasSet)
+ *propertyWasSet = false;
}
return result;
}
-QString ProjectResolver::verbatimValue(Item *item, const QString &name) const
+QString ProjectResolver::verbatimValue(Item *item, const QString &name, bool *propertyWasSet) const
{
- return verbatimValue(item->property(name));
+ return verbatimValue(item->property(name), propertyWasSet);
}
void ProjectResolver::ignoreItem(Item *item, ProjectContext *projectContext)
@@ -675,7 +680,24 @@ void ProjectResolver::resolveRuleArtifact(const RulePtr &rule, Item *item,
RuleArtifactPtr artifact = RuleArtifact::create();
rule->artifacts += artifact;
artifact->location = item->location();
- artifact->fileName = verbatimValue(item, QLatin1String("fileName"));
+
+ bool filePathSet;
+ artifact->filePath = verbatimValue(item, QLatin1String("filePath"), &filePathSet);
+
+ // ### remove Artifact.fileName in qbs 1.4
+ bool fileNameSet;
+ const QString deprecatedFileName = verbatimValue(item, QLatin1String("fileName"), &fileNameSet);
+ if (fileNameSet) {
+ if (filePathSet) {
+ throw ErrorInfo(Tr::tr("Artifact.fileName and Artifact.filePath cannot both be set."),
+ item->location());
+ }
+ artifact->filePath = deprecatedFileName;
+ m_logger.printWarning(ErrorInfo(Tr::tr("The property Artifact.fileName is deprecated. "
+ "Please use Artifact.filePath instead."),
+ item->location()));
+ }
+
artifact->fileTags = m_evaluator->fileTagsValue(item, QLatin1String("fileTags"));
artifact->alwaysUpdated = m_evaluator->boolValue(item, QLatin1String("alwaysUpdated"));
if (artifact->alwaysUpdated)
@@ -765,9 +787,26 @@ void ProjectResolver::resolveTransformer(Item *item, ProjectContext *projectCont
throw ErrorInfo(Tr::tr("Transformer: wrong child type '%0'.").arg(child->typeName()));
SourceArtifactPtr artifact = SourceArtifact::create();
artifact->properties = m_productContext->product->moduleProperties;
- QString fileName = m_evaluator->stringValue(child, QLatin1String("fileName"));
+ // ### remove Artifact.fileName in qbs 1.4
+ bool fileNameSet;
+ QString fileName = m_evaluator->stringValue(child, QLatin1String("fileName"), QString(),
+ &fileNameSet);
+ bool filePathSet;
+ QString filePath = m_evaluator->stringValue(child, QLatin1String("filePath"), QString(),
+ &filePathSet);
+ if (fileNameSet && filePathSet) {
+ throw ErrorInfo(Tr::tr("Artifact.fileName and Artifact.filePath cannot both be set."),
+ child->location());
+ }
+ if (fileNameSet) {
+ m_logger.printWarning(ErrorInfo(Tr::tr("The property Artifact.fileName is deprecated. "
+ "Please use Artifact.filePath instead."),
+ child->location()));
+ } else {
+ fileName = filePath;
+ }
if (Q_UNLIKELY(fileName.isEmpty()))
- throw ErrorInfo(Tr::tr("Artifact fileName must not be empty."));
+ throw ErrorInfo(Tr::tr("Artifact.filePath must not be empty."));
artifact->absoluteFilePath
= FileInfo::resolvePath(m_productContext->buildDirectory, fileName);
artifact->fileTags = m_evaluator->fileTagsValue(child, QLatin1String("fileTags"));
diff --git a/src/lib/corelib/language/projectresolver.h b/src/lib/corelib/language/projectresolver.h
index 422f4d4ce..ab1bfd6a2 100644
--- a/src/lib/corelib/language/projectresolver.h
+++ b/src/lib/corelib/language/projectresolver.h
@@ -91,8 +91,8 @@ private:
};
void checkCancelation() const;
- QString verbatimValue(const ValueConstPtr &value) const;
- QString verbatimValue(Item *item, const QString &name) const;
+ QString verbatimValue(const ValueConstPtr &value, bool *propertyWasSet = 0) const;
+ QString verbatimValue(Item *item, const QString &name, bool *propertyWasSet = 0) const;
ScriptFunctionPtr scriptFunctionValue(Item *item, const QString &name) const;
ResolvedFileContextPtr resolvedFileContext(const FileContextConstPtr &ctx) const;
void ignoreItem(Item *item, ProjectContext *projectContext);