Commit graph

14328 commits

Author SHA1 Message Date
Bill Currie
c9cfd9e8cf Fix window build for recent config changes
And, more importantly get curl working in the mxe build.
2023-11-23 17:16:53 +09:00
Bill Currie
7a2a61d365 Merge branch 'wip-trails' 2023-11-23 14:00:11 +09:00
Bill Currie
a8ff58baa4 [glsl] Remove a debug print 2023-11-23 13:58:44 +09:00
Bill Currie
43cea64709 [renderer] Get trails looking vaguely acceptable
Still not great, but I like the falloff and the mixing is better. The
path offset seems to be unstable, so that needs work still.
2023-11-23 13:58:44 +09:00
Bill Currie
34daf9032d [renderer] Get trails rendering again
They're not quite working (trail path offset is incorrect) but their
pixels are getting to the screen. Also, lifetimes are off for rocket
trails in that as soon as the entity dies, so does the trail.
2023-11-23 13:58:44 +09:00
Bill Currie
65bf3ab459 [qfcc] Switch to using the internal preprocessor
It's actually good enough for building qfcc: it fails a couple of
obscure c23 preprocessor examples that can be ignored for now (the rest
of QF builds without any apparent issue).
2023-11-23 13:33:44 +09:00
Bill Currie
2fd2a7086f [qfcc] Save disabled preproc expression debug 2023-11-23 13:33:12 +09:00
Bill Currie
5e02716a01 [qfcc] Save force-expanding function-type arg macros
The expansion is necessary for the final test in preproc-2.r, but breaks
preproc-1.r because the closing ')' is *not* visible to collect_args
(its assumption is incorrect). This needs reworking (and probably
rethinking) of the entire macro argument collection, but I need a little
break from the preprocessor (and it's good enough for *most* uses), so
I'm adding the code (disabled) in order to avoid losing it and my notes
about the problem.
2023-11-23 13:28:48 +09:00
Bill Currie
4480453861 [qfcc] Fail function-type macro expansion early
That is, if anything other than '(' (even a macro/argument that expands
to '(')is seen while checking for a function-type macro, the expansion
fails. This gets preproc-1.r working properly.
2023-11-23 13:26:02 +09:00
Bill Currie
4ed25ed616 [qfcc] Correct some misuses of scanner
It really affected only collect_args, but in fixing that I noticed I was
very inconsistent with scanner's type (should be yyscan_t or void *, but
not yyscan_t *).
2023-11-22 11:54:14 +09:00
Bill Currie
8c0b30e4e6 [qfcc] Force object-type macro expansion in args
This seems to get __FILE__ and __LINE__ working as expected, at least
when not used in __VA_OPT__.
2023-11-22 00:31:54 +09:00
Bill Currie
bf44ff3194 [qfcc] Base default object file name on output file
There's no guarantee the source file is in a writable directory (in
fact, it is very definitely in a read-only directory when running
`make distcheck`). However, it is reasonable to assume the output file
is being written to a writable directory thus default the object file
directory to that of the output file, but still use the source file's
name for the object file name.

Fixes #51
2023-11-20 14:19:01 +09:00
Bill Currie
70d07d8026 [quakefs] Document that QFS_LoadFile closes the file
In the end, I decided that the behavior isn't so bad, but it does need to
be documented.

Closes #34
2023-11-19 16:40:24 +09:00
Bill Currie
e8b2822587 [nq] Add more checks for dedicated server in client
When the nq client is run in dedicated server mode, the client state is not
initialized thus none of the client code should be run. This became more
critical with the addition of scenes and an ECS as there are a lot more
pointers involved.

Fixes #46
2023-11-19 15:03:13 +09:00
Bill Currie
ce6e7a32fd [qfcc] Use place-markers for some empty expansions
This gets most of the second preprocessor test working, apparently just
some problems with macro arguments not getting expanded for ## (unless
there's more lurking, of course, which I know there is for __LINE__).
2023-11-19 14:08:09 +09:00
Bill Currie
eb6a5b771a [qfcc] Get __VA_OPT__ non-expansion working
For most cases: function-type macros aren't properly checked for being
empty, but this gets a lot of the next preprocessor test working.
2023-11-19 02:10:44 +09:00
Bill Currie
5c0b2aa891 [qfcc] Clean up some cruft from recent __VA_OPT__ changes
Using a special token id for __VA_OPT__ means the macro is no longer
needed (need to improve checks for misuse of __VA_OPT__, though).
2023-11-18 19:56:19 +09:00
Bill Currie
fc03e7eb7a [qfcc] Recursively expand __VA_OPT__'s argument
This seems to do the right thing, and my test case (copied from the C
spec) passes finally.
2023-11-18 18:09:34 +09:00
Bill Currie
344b79a401 [qfcc] Go back to not pre-expanding macro args
It just feels cleaner than unnecessarily copying token chains. It turns
out that the core problem was just order of operations in next_token:
moving the pending_macro code to after arg/macro detection seems to be
correct (even bare `G LPAREN() 0)` is *not* expanding `G`, as expected).
2023-11-18 17:37:20 +09:00
Bill Currie
d628595589 [qfcc] Collect __VA_OPT__'s arguments early
This makes working with __VA_OPT__ much easier. However, I've come to
dislike expand_args. Still, the code is slowly cleaning up.
2023-11-18 13:41:20 +09:00
Bill Currie
49667b439d [build] Batch-report missing packages
Very debian-centric and the reported packages rely on package dependencies,
but it's better than getting part-way through a build only to find
something is missing and having to restart..
2023-11-18 12:16:35 +09:00
Bill Currie
1545480ecb [debian] Clear out a large pile of bitrot
This gets debian packages building again, though it was mainly a test for
some improvements to configure and missing package reporting.
2023-11-18 11:53:23 +09:00
Bill Currie
053e9f2fb4 Add more library packages for building
freetype, fontconfig, harfbuzz, xinput and xfixes. Also, create a shell
script that installs all the debian packages needed to build QF.
2023-11-17 20:51:12 +09:00
Bill Currie
c322fb68d3 [cexpr] Remove unnecessary config.h include 2023-11-17 20:51:12 +09:00
Bill Currie
25b6e0369d [build] Enable link-time optimizations
They seem to make a small difference. I guess QF is currently well
enough organized that LTO just doesn't have enough to work with, though
I suspect that will change when I make more use of the ECS.
2023-11-16 19:11:47 +09:00
Bill Currie
d7258f09bd [gib] Hide regex's re_max_failures
ld pops up a warning about it being obsolete (I guess something is being
picked up from libc), but since we have our own regex, there's no way it
can go away without our "permission".
2023-11-16 19:09:59 +09:00
Bill Currie
114f564a98 Fix some issues found by gcc's -flto
More const/pure stuff and even some type issues.
2023-11-16 17:09:20 +09:00
Bill Currie
748bd377c6 [qfcc] Initialize overloaded function tables early
This fixes a rather old segfault bug uncovered by the macro testing.
2023-11-16 01:18:10 +09:00
Bill Currie
e86444eff8 [qfcc] Expand macro args early
This gets macro expansion mostly working, but __VA_OPT__ isn't expanding
properly yet. Still, one step closer.
2023-11-16 01:16:39 +09:00
Bill Currie
1dc5d4990c [qfcc] Expand __VA_OPT__ early
__VA_OPT__ needs to be fully expanded before it can be processed as an
argument. Unfortunately, this has uncovered bugs elsewhere in macro
expansion.
2023-11-15 12:46:38 +09:00
Bill Currie
37819523d0 [qfcc] Fix macro expansion basics (again)
It turned out I had simply forgotten to ensure the token chains were
properly terminated (the struct copy would copy the next of the source
token and thus macro args always expanded to the last token of the
parent macro). And then I'd missed saving the token text when parsing
predefined macros. __VA_OPT__ is still a problem, but this work was for
making that a little easier.
2023-11-12 13:20:35 +09:00
Bill Currie
8de214c782 [qfcc] Rework preprocessor tokens
I got tired of the way the separate token types for macro expansion and
the rest of the preprocessor parser were handled. This makes them a
little more unified. Macro expansion seems to be slightly broken again
in that min/max/bound mess up badly, and __VA_OPT__ does things in the
wrong order, but I wanted to get this in as a checkpoint.
2023-11-11 22:32:29 +09:00
Bill Currie
881b6626e4 [qfcc] Partially implement __VA_OPT__ and __VA_ARGS__
__VA_ARGS__ seems to be working but __VA_OPT__ still needs a lot of work
for dealing with its expansions, but basic error checking and simple
expansions seem to work.
2023-11-07 12:36:56 +09:00
Bill Currie
d21260d9f6 [qfcc] Use rua_loc_t for most location information
This gets rid of the simple source_file and source_line in pr_info_t, so
all expressions, and many other things have full location information.
2023-11-06 14:25:20 +09:00
Bill Currie
bd2bc16767 [qfcc] Get token##pasting working
This seems to do the right thing, but I need to come up with a good test
suite.
2023-11-06 11:28:17 +09:00
Bill Currie
b952c11dce [qfcc] Get function-type macro arguments working
Or at least mostly so: token##pasting is still broken, but #stringize
and nested macros seem to work.
2023-11-04 21:08:40 +09:00
Bill Currie
6bfb1f37f0 [qfcc] Rework macro expansion
Macros now store their arguments and have a cursor pointing to the next
token to take from their expansion list. While not checked yet, this
will make avoiding recursive macro invocations much easier. More
importantly, it's a step closer to correct argument expansion (though
token pasting is currently broken).
2023-11-03 13:54:08 +09:00
Bill Currie
6408c131dd [qfcc] Ensure macros expand for #elif
It seems I wasn't quite paying attention to when I should be getting
that invalid directive error for #version and when I shouldn't.
2023-11-03 13:48:38 +09:00
Bill Currie
82ce36c981 [qfcc] Add macro support for __FILE__ and __LINE__
There are some expansion problems, but this moves their handling to
where it needs to be.
2023-11-01 16:19:39 +09:00
Bill Currie
bbae71c488 [qfcc] Save and reset condition stack for includes
This makes it much easier to keep track of end of file in a conditional
block (#if...#endif) as #include in non-suppressed code would result in
spurious eof errors otherwise. I'm a little concerned about correctness,
but everything seems to work and it should be right as suppressed
include directives do not change the state at all, and the suppressed is
its own flag not in the condition stack.
2023-10-31 10:48:11 +09:00
Bill Currie
c5b357ddb1 [qfcc] Delay processing of asx and incop tokens
The op code needs to be set just before being passed to the qc parser so
it doesn't get lost in macro expansion.

And vector values need to not be processed when recording otherwise they
get lost.
2023-10-31 10:38:09 +09:00
Bill Currie
51f3915e12 [qfcc] Separate preprocess only and preprocess output
-M does only preprocessing but does not generate the preprocessed output
(which is -E's job). Prevents mangled dependency files.
2023-10-31 08:42:28 +09:00
Bill Currie
b3cbec7f87 [qfcc] Add the preprocessor files to BUILT_SOURCES
Intermittent build failures are no fun.
2023-10-30 23:17:08 +09:00
Bill Currie
9a00998d9c [qfcc] Fix vector ops after preprocessor changes
I'm not sure what exactly caused vector literals to break, but bailing
out of the vector ops section on conversion to vector or quaternion
fixes game-source.
2023-10-30 22:46:43 +09:00
Bill Currie
05eea82d0d [qfcc] Relax int conversion criteria
Allow 32-bit positive values without a warning and warn on conversion
issues for float. The whole conversion system needs cleaning up for
v6/v6p/ruamoko.
2023-10-30 18:52:02 +09:00
Bill Currie
5f21422df3 [qfcc] Parse parameterless function-type macros
This allows `#define foo()` to work as expected.
2023-10-30 17:20:32 +09:00
Bill Currie
16241b6811 [qfcc] Fix a bunch of preprocessing options issues
-D options weren't counting correctly so build_cpp_args was writing past
the end of the array allocated for command line arguments

parse_cpp_name had an out-by-one resulting in reading past the end of
the string.

The qfcc system include path was being set in the wrong place (not sure
why I thought that was right), and not respecting no_default_paths.

-M was generating preprocessor output when it should not have been,
resulting in corrupted dependency files.
2023-10-30 17:16:16 +09:00
Bill Currie
c7905422f1 [qfcc] Use a hash table for types
I don't remember why I couldn't get this to work last time I tried, but
it went well this time, and made a significant difference to compiling
vulkan.r (from 1.1s to 0.15s unoptimized or 0.8s optimized).
2023-10-30 15:38:43 +09:00
Bill Currie
bdf3316bef [qfcc] Simplify // comment handling
This fixes the problem with // comments after the file in #include and
the core problem the complicated // handling tried to fix with
suppressed directives. Funny how it's always the simpler code that works
better :/
2023-10-30 14:32:11 +09:00
Bill Currie
a3c94628bc [qfcc] Detect errors in module finalization
Though they shouldn't happen (they're really internal errors), it's not
good pretending they didn't happen.
2023-10-30 13:51:45 +09:00