From 3749e981aa69d7598879d50b1f099181e0929d30 Mon Sep 17 00:00:00 2001 From: Jeff Morriss Date: Sat, 6 Jun 2015 22:24:33 -0400 Subject: Support building the X11 dissector outside the source tree. Use relative path names for the script names and mesa/xcbproto directories so different paths (from different users) don't cause deltas. Also, with help from Peter Wu and Graham, get generation of the X11 dissector working from cmake. Change-Id: I95cd2a0f973dcbc67f457ff94c28e46a666afb74 Reviewed-on: https://code.wireshark.org/review/12213 Petri-Dish: Jeff Morriss Tested-by: Petri Dish Buildbot Reviewed-by: Alexis La Goutte Reviewed-by: Peter Wu --- tools/process-x11-fields.pl | 17 +++++++--- tools/process-x11-xcb.pl | 77 ++++++++++++++++++++++++--------------------- 2 files changed, 54 insertions(+), 40 deletions(-) (limited to 'tools') diff --git a/tools/process-x11-fields.pl b/tools/process-x11-fields.pl index c3a9888274..aab1ab5ba3 100755 --- a/tools/process-x11-fields.pl +++ b/tools/process-x11-fields.pl @@ -16,26 +16,33 @@ # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # -open(DECL, ">x11-declarations.h") || die; -open(REG, ">x11-register-info.h") || die; +use File::Spec; + +my $srcdir = shift; +die "'$srcdir' is not a directory" unless -d $srcdir; + +open(DECL, "> $srcdir/x11-declarations.h") || die; +open(REG, "> $srcdir/x11-register-info.h") || die; + +my $script_name = File::Spec->abs2rel ($0, $srcdir); sub add_generated_header { my ($out) = @_; print $out <catfile('xcbproto', 'src', '*.xml'); +my $srcdir = shift; +die "'$srcdir' is not a directory" unless -d $srcdir; + +my @reslist = grep {!/xproto\.xml$/} glob File::Spec->catfile($srcdir, 'xcbproto', 'src', '*.xml'); my @register; +my $script_name = File::Spec->abs2rel ($0, $srcdir); + my %basictype = ( char => { size => 1, encoding => 'ENC_ASCII|ENC_NA', type => 'FT_STRING', base => 'BASE_NONE', get => 'VALUE8', list => 'listOfByte', }, void => { size => 1, encoding => 'ENC_NA', type => 'FT_BYTES', base => 'BASE_NONE', get => 'VALUE8', list => 'listOfByte', }, @@ -167,9 +172,9 @@ my $error; my $enum; # Mesa API definitions keep moving -my @mesas = ('mesa/src/mapi/glapi/gen', # 2010-04-26 - 'mesa/src/mesa/glapi/gen', # 2010-02-22 - 'mesa/src/mesa/glapi'); # 2004-05-18 +my @mesas = ($srcdir . '/mesa/src/mapi/glapi/gen', # 2010-04-26 + $srcdir . '/mesa/src/mesa/glapi/gen', # 2010-02-22 + $srcdir . '/mesa/src/mesa/glapi'); # 2004-05-18 my $mesadir = (grep { -d } @mesas)[0]; sub mesa_category_start { @@ -913,19 +918,19 @@ sub dissect_element($$$$$;$$) } } - if (@test > 1) { - # We have more than one conditional, add parentheses to them. - # We don't add parentheses to all the conditionals because - # clang complains about the extra parens if you do "if ((x == y))". - my @tests_with_parens; - foreach my $conditional (@test) { - push @tests_with_parens, "($conditional)"; - } + if (@test > 1) { + # We have more than one conditional, add parentheses to them. + # We don't add parentheses to all the conditionals because + # clang complains about the extra parens if you do "if ((x == y))". + my @tests_with_parens; + foreach my $conditional (@test) { + push @tests_with_parens, "($conditional)"; + } - @test = @tests_with_parens; - } + @test = @tests_with_parens; + } - my $list = join ' || ', @test; + my $list = join ' || ', @test; say $impl $indent."if ($list) {"; my $vp = $varpat; @@ -1601,7 +1606,7 @@ sub include end_tag_handlers => { 'xcb' => \&include_end, }); - $xml->parsefile("xcbproto/src/$include.xml") or die ("Cannot open $include.xml\n"); + $xml->parsefile("$srcdir/xcbproto/src/$include.xml") or die ("Cannot open $include.xml\n"); $t->purge; } @@ -1730,9 +1735,11 @@ sub add_generated_header { my ($out, $using) = @_; my $ver = find_version($using); + $using = File::Spec->abs2rel ($using, $srcdir); + print $out < x11-extension-implementation.h' - or die ("Cannot open x11-extension-implementation.h for writing\n"); -$error = new IO::File '> x11-extension-errors.h' - or die ("Cannot open x11-extension-errors.h for writing\n"); +$impl = new IO::File "> $srcdir/x11-extension-implementation.h" + or die ("Cannot open $srcdir/x11-extension-implementation.h for writing\n"); +$error = new IO::File "> $srcdir/x11-extension-errors.h" + or die ("Cannot open $srcdir/x11-extension-errors.h for writing\n"); -add_generated_header($impl, 'xcbproto'); -add_generated_header($error, 'xcbproto'); +add_generated_header($impl, $srcdir . '/xcbproto'); +add_generated_header($error, $srcdir . '/xcbproto'); # Open the files generated by process-x11-fields.pl for appending -$reg = new IO::File '>> x11-register-info.h' - or die ("Cannot open x11-register-info.h for appending\n"); -$decl = new IO::File '>> x11-declarations.h' - or die ("Cannot open x11-declarations.h for appending\n"); +$reg = new IO::File ">> $srcdir/x11-register-info.h" + or die ("Cannot open $srcdir/x11-register-info.h for appending\n"); +$decl = new IO::File ">> $srcdir/x11-declarations.h" + or die ("Cannot open $srcdir/x11-declarations.h for appending\n"); -print $reg "\n/* Generated by $0 below this line */\n"; -print $decl "\n/* Generated by $0 below this line */\n"; +print $reg "\n/* Generated by $script_name below this line */\n"; +print $decl "\n/* Generated by $script_name below this line */\n"; # Mesa for glRender if (-e "$mesadir/gl_API.xml") { - $enum = new IO::File '> x11-glx-render-enum.h' - or die ("Cannot open x11-glx-render-enum.h for writing\n"); - add_generated_header($enum, 'mesa'); + $enum = new IO::File "> $srcdir/x11-glx-render-enum.h" + or die ("Cannot open $srcdir/x11-glx-render-enum.h for writing\n"); + add_generated_header($enum, $srcdir . '/mesa'); print $enum "static const value_string mesa_enum[] = {\n"; print $impl '#include "x11-glx-render-enum.h"'."\n\n"; @@ -1879,9 +1886,9 @@ eot print $impl " }\n}\n"; } -$enum = new IO::File '> x11-enum.h' - or die ("Cannot open x11-enum.h for writing\n"); -add_generated_header($enum, 'xcbproto'); +$enum = new IO::File "> $srcdir/x11-enum.h" + or die ("Cannot open $srcdir/x11-enum.h for writing\n"); +add_generated_header($enum, $srcdir . '/xcbproto'); print $impl '#include "x11-enum.h"'."\n\n"; # XCB -- cgit v1.2.1