Commit Graph

52 Commits

Author SHA1 Message Date
Oswald Buddenhagen
f53ed6c4b3 don't pretend that break()/next()/return() are functions
it's a pretty braindead thing to implement control flow statements as
(built-in) functions.

as a "side effect", this fixes return() value handling for lists.

Change-Id: I59c8efa0e4d65329327115f7f8ed20719e7f7546
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-09-12 17:05:20 +02:00
Oswald Buddenhagen
c5e87aa0c1 make $$shell_{path,quote}() use correct path separator
follow suit with qmake ...

Change-Id: I0221f6c81bc770c37f501d79c31860549c0c0076
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
2012-08-28 14:37:32 +02:00
Oswald Buddenhagen
fddd20ffad fix return() sanity check
the value map stack always has at least one map on it.

Change-Id: I836de07a14754b995403065443d3758bfc6a8683
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-28 14:34:00 +02:00
Oswald Buddenhagen
12e9472934 unbreak $$system() in bootstrapped mode
Change-Id: I43eb4a7a94b6df3d964b7bfd1747f953f436ba10
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
2012-08-28 14:33:37 +02:00
Oswald Buddenhagen
b9829ab0a6 fix leaking of raw data in a bunch of new expand functions
Change-Id: Ifa7e481e7d84c50ca52c780f84156e0a5c8d9e98
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
2012-08-15 12:11:17 +02:00
Oswald Buddenhagen
e15f1cee01 make $$relative_path() minimize already relative paths
follow suit with qmake ...

Change-Id: I8346bff6e31dcd32b182dd489b85636da6283e2a
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
2012-08-15 09:19:32 +02:00
Oswald Buddenhagen
bdd8cf300b introduce ProKey class
while this is actually just an alias for ProString (with explicit
zero-cost conversions only), it nicely illustrates the use of particular
variables. it also serves to hide the NoHash hack from public view.

Change-Id: Iaf9283c64f320ad84a77d9573d1fde6d401c49df
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-06 15:05:17 +02:00
Oswald Buddenhagen
c07695a423 add missing map() call
the other branch in the function also does it

Change-Id: I74e27fa0bb997b95df904f5be48d1f251814c323
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
2012-08-06 15:04:42 +02:00
Oswald Buddenhagen
5bd33a7999 add cache() function
follow suit with qmake ...

Change-Id: I8be9b0ecdc45c6358fe00d03ea5d9e77c631c3bb
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-02 13:49:21 +02:00
Oswald Buddenhagen
10a87a96c3 add "blob" and "lines" modes to $$cat() and $$system()
follow suit with qmake ...

Change-Id: I091c2f10f547d8f339a2f0cadf5a49cfe0a88cea
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-02 13:45:14 +02:00
Oswald Buddenhagen
212a12f312 directly forward system() output to console
this makes it identical to the bootstrapped path used by qmake itself.

this applies only to full qmake mode.

Change-Id: I7100315fe95d0ee900f6bea2552c9292e3d1a07d
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-02 13:45:03 +02:00
Oswald Buddenhagen
fa91da2d41 add write_file() function
follow suit with qmake ...

Change-Id: I4e57e160b811b6496adf208b49f1dd0df0b57563
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:49:02 +02:00
Oswald Buddenhagen
b7c3b390f5 add touch() function
follow suit with qmake ...

Change-Id: I906bf83bbbb106cddd8becd85faef8e1c4c5d64f
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:48:49 +02:00
Oswald Buddenhagen
5febcd2ddc add mkpath() function
follow suit with qmake ...

Change-Id: I9ad3b3a6765b5e44cb9da87401f29c838d59491d
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:48:31 +02:00
Oswald Buddenhagen
1c98f30e80 add log() function
follow suit with qmake ...

using fputs() instead of the fancy handler functions, as this is only for
qmake, which would just print to stdout anyway.

Change-Id: I0433d8157ce8c6e580b3fec6f622896b972f7b48
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:48:20 +02:00
Oswald Buddenhagen
369fdc3aee optimization & clarification of m_skipLevel use
as the branch evaluation in non-cumulative mode nowadays actually skips
code instead of merely incrementing m_skipLevel, !m_cumulative implies
!m_skipLevel. based on that we can eliminate some always true/false
conditionals, and hard-wire m_skipLevel to zero if
PROEVALUATOR_CUMULATIVE is not #defined.

Change-Id: I19569ff96f21a5074f677b873ed800a6818f1a6b
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:47:47 +02:00
Oswald Buddenhagen
459d6f8e40 don't print an empty line if system() produces no stderr
Change-Id: I88d85c70334de2a5f913b6c67d0d253094979fd8
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:47:04 +02:00
Oswald Buddenhagen
76db45fafe make error() actually cancel execution in non-cumulative mode
Change-Id: I50289cdfe906c923076a4a2dc57f7ca35c8e9b90
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:45:57 +02:00
Oswald Buddenhagen
986c953ac6 minor speedup of message()/warning()/error()
properly identify the function in the dispatcher, to save an additional
string comparison later.

Change-Id: I6bb88bf620f5f47416d8f58cf00050913fc3aa4b
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:45:45 +02:00
Oswald Buddenhagen
5249053473 bring isEmpty() semantics in line with qmake
qmake doesn't check if there is exactly one empty element - be it
because (theoretically) there can be no empty elements.

Change-Id: I603f2a472c02d270eafd1b3f6f9adae4349b3af0
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:45:37 +02:00
Oswald Buddenhagen
d77f76374a make defined() support testing definedness of variables
follow suit with qmake ...

Change-Id: I9b8a7b64df812c4c5a5ee25eaf931629feca0689
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:45:28 +02:00
Oswald Buddenhagen
9d5ff668ef add requires() function and REQUIRES magic variable
follow suit with qmake ...

Change-Id: I6afc3898a01cc9926b9652b7f0f66becc255f01b
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:45:06 +02:00
Oswald Buddenhagen
e739841c63 implement if() by means of precompilation
the performance is about the same (depending on the expression type it's
better or worse), but a lot of code just disappears.

Change-Id: I60eb9b87f23cc811d3f9577841c38966ecfd8e43
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:44:55 +02:00
Oswald Buddenhagen
bb063b35f4 don't ignore parsing errors in eval() and on the command line
to optimally support cumulative mode, the parser will happily return a
bytecode object even when parsing failed, so errors must be treated
later.

Change-Id: I1a5c0ca9bf46a93d7359f590f0dd0ddc96baba0a
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:44:25 +02:00
Oswald Buddenhagen
160e608f5a make visitProBlock() return the last condition's state
will need it later.

eval() needs to be taught to ignore the return code, as qmake stupidly
does. as a side effect, flow control statements inside eval() don't have
an effect outside eval() any more, which is only sane.

Change-Id: I924e9d687f693a224dd7fa73af4a9bc69247e2df
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:44:13 +02:00
Oswald Buddenhagen
3d629b1a2b add $$system_quote() & $$shell_quote() functions
follow suit with qmake ...

Change-Id: I3db37ba73cb709d8baf200600ae29241bc26bee5
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:43:57 +02:00
Oswald Buddenhagen
3522a3e050 add $$system_path() & $$shell_path() functions
follow suit with qmake ...

Change-Id: I41ceb93b234eafd5202c618a7af36e35278ad79f
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:43:27 +02:00
Oswald Buddenhagen
6c9c086632 add $$clean_path() function
follow suit with qmake ...

Change-Id: Ic80bab44704baf8a265b0ebead6f0ec024653f73
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:43:04 +02:00
Oswald Buddenhagen
58a431fac9 add $$absolute_path() & $$relative_path() functions
follow suit with qmake ...

Change-Id: Idbe30c40ef86286b871d678900c963b5d9d851c4
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:42:50 +02:00
Oswald Buddenhagen
187751f967 add $$shadowed() function
follow suit with qmake ...

Change-Id: Ic97576eaf74dfd58e8d8cd2f8034dac3963b92c4
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:42:39 +02:00
Oswald Buddenhagen
b475ae43de add $$enumerate_vars() function
follow suit with qmake ...

Change-Id: I28649e443e91c061e1452674dfc2a101b097da7f
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:42:19 +02:00
Oswald Buddenhagen
f1d7836ec0 add $$prompt() function
follow suit with qmake ...

this doesn't use any of the fancy handler functions for printing the
message, as it doesn't seem worth it: the read is done directly from
stdin anyway, and everything else would be overengineered, given the
purpose - this is probably the most useless qmake function ever.

Change-Id: I4831bfc06ce2623c4090d13c04be286bc18f1b5d
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:42:10 +02:00
Oswald Buddenhagen
115b898d8c add $$val_escape() function
follow suit with qmake ...

Change-Id: I2262b48f5989c7969a59f7d41b5a308fc5f52c29
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:41:55 +02:00
Oswald Buddenhagen
24feed1bb4 add $$reverse() function
follow suit with qmake ...

Change-Id: I21da3676713101df1be956946c6543f7ae388f5f
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
2012-08-01 16:41:25 +02:00
Oswald Buddenhagen
dc3ed21141 add $$format_number() function
follow suit with qmake ...

Change-Id: Ie51c44cb38baa32c9c519bd7fec660f4c87f78f4
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
2012-08-01 16:41:19 +02:00
Oswald Buddenhagen
40ec38735e unify error messages
- start with capital letter (unless it's a function name)
- end with period

Change-Id: I62350ca2c632cf27334fe6acad2ad0487eef74a4
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:41:05 +02:00
Oswald Buddenhagen
397cfb700b normalize the output of $$find()
follow suit with qt5 qmake. this is actually wrong for qt4 qmake, but i
boldly assume that it doesn't matter.

Change-Id: I7e0ced1f335fde28f56fa6c5a4a1a581ec7e9ad0
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:40:17 +02:00
Oswald Buddenhagen
780c0eac10 fix $$split()'s argument check
Change-Id: I2cd6dc1ad571497f540360d17dadd5e4b300ef4a
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
2012-08-01 16:40:01 +02:00
Oswald Buddenhagen
a93e24fd0d implement qmake language and deprecation warnings
Change-Id: Ia5dd0c408ace4e779da898ffb60e9ca12a383225
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-08-01 16:09:49 +02:00
Oswald Buddenhagen
0af96c128a revamp message callbacks
instead of having a bazillion different callbacks, have only one with a
type parameter. the drain typically multiplexes all into one stream anyway.

Change-Id: I963daefc5a266c91334a4cc599570ed26b603d5d
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
2012-08-01 16:09:33 +02:00
Eike Ziller
e0e8cf3ada Contact -> qt-project.org
Change-Id: I7134d7de30bcf9f9dcfad42520dd45ee083a852d
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-07-19 13:23:21 +02:00
Oswald Buddenhagen
aca1c4bd50 introduce PROEVALUATOR_FULL #define
if this is enabled, the evaluator implements all functionality
necessary for qmake. without it, functionality which is unnecessary or
outright dangerous in qt creator or lupdate context is omitted.

Change-Id: I233cfa6daf2e4451f9f1d3d14711be2a7cfe4293
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
2012-07-09 21:18:29 +02:00
Oswald Buddenhagen
bc4c499684 eliminate EvalIntoMode
it's a relic from times of entanglement with ProFileEvaluator.

Change-Id: I903c1a8a21fcb4a0c9029d0245fba56043e62718
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-07-09 21:12:51 +02:00
Oswald Buddenhagen
8a4053d14b dispose of valuesDirect()
it has become a trivial wrapper around values()

Change-Id: Ia3165ec4cf968588f6ad3f5a2e8abe61dcae2f59
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
2012-07-04 14:04:25 +02:00
Oswald Buddenhagen
5a6625245b introduce ProValueMap typedef for brevity's sake
Change-Id: I41b7202acb2889d217d1f437050443bea853ee87
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
2012-07-04 12:48:00 +02:00
Oswald Buddenhagen
2f4171459c give load()/include() with target and infile()/$$fromfile() a clean environment
follow suit to qmake ...

Change-Id: If9aa8b14e8b54768faef9151727bdb29fa1ed64b
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-07-04 12:43:48 +02:00
Oswald Buddenhagen
7257b9682e remove injection of default_pre in infile()/$$fromfile()
follow suit to qmake ...

Change-Id: I6d884e284275e64e13cfea7fdc868341136c81f5
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
2012-07-04 12:42:58 +02:00
Oswald Buddenhagen
ac297f8e6b introduce QMakeHandler
this is QMakeEvaluatorHandler, but derived from QMakeParserHandler.
the idea is that the parser can be used stand-alone, while the evaluator
needs the parser as well.
we will need it in QMakeGlobals as well, so put it there, as that is the
most central place.

Change-Id: I6ee46c0e4b2e044bf3bfc6e4235b53525ddfc875
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
2012-07-04 12:39:37 +02:00
Oswald Buddenhagen
9c46bd5dec move expandEnvVars() to QMakeGlobals
fits better there

Change-Id: Id369d8e22db97affd03ed991433b898b110f1946
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
2012-07-04 12:35:42 +02:00
Oswald Buddenhagen
251ed0e878 move LoadFlags to QMakeEvaluator
Change-Id: I931bce3aaf1ccaaacf586ca54b93659485b79372
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
2012-07-04 12:24:44 +02:00