1# // (C) Copyright Tobias Schwinger
2# //
3# // Use modification and distribution are subject to the boost Software License
4# // Version 1.0. (See http:/\/www.boost.org/LICENSE_1_0.txt).
5
6# // Preprocess and run this script.
7# //
8# // Invocation example using the GNU preprocessor:
9# //
10# //   g++ -I$BOOST_ROOT -x c++ preprocess.pl -E |perl
11# //
12# // or in two steps:
13# //
14# //   g++ -I$BOOST_ROOT -x c++ preprocess.pl -E >temp.pl
15# //   perl temp.pl
16
17#define die(x) 1
18die("ERROR: this script has to be preprocessed, stopped");
19#undef die
20
21use strict vars;
22use File::Spec updir,curdir,catfile,canonpath,splitpath,file_name_is_absolute;
23
24# // --- Settings
25my $up = File::Spec->updir();
26
27# // Relative path to the destination directory.
28my $path = File::Spec->catdir($up,$up,$up,'boost','typeof');
29
30my $license = qq@
31/\/ Copyright (C) 2005 Arkadiy Vertleyb
32/\/ Copyright (C) 2005 Peder Holt
33/\/
34/\/ Use modification and distribution are subject to the boost Software License,
35/\/ Version 1.0. (See http:/\/www.boost.org/LICENSE_1_0.txt).
36
37/\/ Preprocessed code, do not edit manually !
38
39@;
40# //---
41
42# // Find this script's directory if run directly from the shell (not piped)
43$path = File::Spec->canonpath
44( File::Spec->catfile
45  ( File::Spec->file_name_is_absolute($0)
46    ? $0 : (File::Spec->curdir(),$0)
47  , $up
48  , File::Spec->splitpath($path)
49  )
50) unless ($0 eq '-');
51die
52( ($0 eq '-')
53  ? "ERROR: please run from this script's directory, stopped"
54  : "ERROR: target directoty not found, stopped"
55) unless (-d $path);
56
57# // Tidy up the contents and write it to a file
58sub write_down(name,contents)
59{
60  my($name,$contents) = @_;
61  my $filename = $name;
62
63  my $fqfname = File::Spec->catfile($path,$filename);
64  $contents =~ s"(((\n|^)\s*\#[^\n]+)|(\s*\n)){2,}"\n"g; # "
65  print STDERR "Writing file: '$filename'\n";
66  open my($file),">$fqfname"
67    or die "ERROR: unable to open file '$filename' for writing, stopped";
68  print $file $license;
69  print $file $contents;
70  close $file;
71}
72
73# // Include external components to ensure they don't end up in the recorded
74# // output
75#define BOOST_TYPEOF_PP_INCLUDE_EXTERNAL
76my $sewer = <<'%--%-EOF-%--%'
77#include <boost/typeof/vector.hpp>
78#undef  BOOST_TYPEOF_VECTOR_HPP_INCLUDED
79%--%-EOF-%--%
80; $sewer = '';
81
82
83#define BOOST_TYPEOF_PREPROCESSING_MODE
84#define BOOST_TYPEOF_LIMIT_SIZE 50
85#define BOOST_TYPEOF_PP_NEXT_SIZE 100
86
87&write_down('vector50.hpp',<<'%--%-EOF-%--%'
88#include <boost/typeof/vector.hpp>
89%--%-EOF-%--%
90);
91#undef  BOOST_TYPEOF_VECTOR_HPP_INCLUDED
92
93#undef  BOOST_TYPEOF_LIMIT_SIZE
94#define BOOST_TYPEOF_LIMIT_SIZE 100
95#define BOOST_TYPEOF_PP_NEXT_SIZE 149
96
97&write_down('vector100.hpp',<<'%--%-EOF-%--%'
98#include <boost/typeof/vector.hpp>
99%--%-EOF-%--%
100);
101#undef  BOOST_TYPEOF_VECTOR_HPP_INCLUDED
102
103#undef  BOOST_TYPEOF_LIMIT_SIZE
104#define BOOST_TYPEOF_LIMIT_SIZE 150
105#define BOOST_TYPEOF_PP_NEXT_SIZE 199
106
107
108&write_down('vector150.hpp',<<'%--%-EOF-%--%'
109#include <boost/typeof/vector.hpp>
110%--%-EOF-%--%
111);
112#undef  BOOST_TYPEOF_VECTOR_HPP_INCLUDED
113
114#undef  BOOST_TYPEOF_LIMIT_SIZE
115#define BOOST_TYPEOF_LIMIT_SIZE 200
116#define BOOST_TYPEOF_PP_NEXT_SIZE 250
117
118&write_down('vector200.hpp',<<'%--%-EOF-%--%'
119#include <boost/typeof/vector.hpp>
120%--%-EOF-%--%
121);
122
123