|
Boost : |
From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2006-01-09 04:52:56
Arkadiy Vertleyb wrote:
> "Tobias Schwinger" <tschwinger_at_[hidden]> wrote
>
>
>>While having CVS access could be a good thing in general, it's probably
>
> easier to
>
>>use a ZIP, this time.
>
>
> For some reason it generates empty files...
>
> What I did was to replace vector.hpp, copy preprocess.pl into
> libs/typeof/tools, and run the pipe version of your example. It reported
> files being written, but all it wrote was copyright info...
>
Yeah it's all my fault, sorry. I just found out I messed up the preprocessing code
by changing the name of a macro (but not everywhere).
vector.hpp (from line 24 on) should read:
#if defined(BOOST_TYPEOF_PP_INCLUDE_EXTERNAL)
# undef BOOST_TYPEOF_PP_INCLUDE_EXTERNAL // <-- this line was bad
# undef BOOST_TYPEOF_VECTOR_HPP_INCLUDED
The ZIP has been updated with a corrected version too.
> My knowledge of perl is equal to zero :-(
Then I should probably demystify that script for you:
The script beautifies and stores the code contained within. After preprocessing
the perl interpreter sees something like that as the main program:
$sewer = <<'some_crypic_end_marker'
< code from external files we #include and which we don't wanna store
stands here >
some_cryptic_end_marker
; $sewer = '';
&write_down("my_preprocessed_file.hpp",<<'some_crypric_end_marker'
< the preprocessed code we want to keep >
[...]
some_cryptic_end_marker
);
&write_down("another_preprocessed_file.hpp",<<'some_crypric_end_marker'
< more preprocessed code we want to keep >
[...]
some_cryptic_end_marker
);
[...]
Which discards an inline section, a.k.a. a here-document: a string literal
spanning multiple lines (of C++ in this case).
And then invokes the subroutine 'write_down' with its first argument being the
file name and the second argument being the content to store (another here-document).
The subroutine write_down runs a regex over the code (passed in via the second
parameter) to remove all the stuff we don't want our preprocessed code to contain
and stores it in a file with a license header.
That's all (the rest in there is just portable path twiddling and error handling)!
-- Tobias
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk