r8801: Change --output to --outputdir and make pidl add a data representation prefix
authorJelmer Vernooij <jelmer@samba.org>
Wed, 27 Jul 2005 18:53:07 +0000 (18:53 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:30:06 +0000 (13:30 -0500)
to pidl itself. Useful for supporting other data representation types.

source/build/pidl/Parse/Pidl/Util.pm
source/build/pidl/pidl
source/script/build_idl.sh

index 8030a2c070737c37f407e6892190c7fe97d384c9..b98b7bca00e82e3dceca20d1b0e87e7dacf399ca 100644 (file)
@@ -87,18 +87,6 @@ sub FileSave($$)
     close(FILE);
 }
 
-#####################################################################
-# return a filename with a changed extension
-sub ChangeExtension($$)
-{
-    my($fname) = shift;
-    my($ext) = shift;
-    if ($fname =~ /^(.*)\.(.*?)$/) {
-       return "$1$ext";
-    }
-    return "$fname$ext";
-}
-
 #####################################################################
 # a dumper wrapper to prevent dependence on the Data::Dumper module
 # unless we actually need it
index 18811287bf9822f8c7b10562776263fac6280a3e..6dbca922f67380b2e01e2e6af7a84ca2200f183c 100755 (executable)
@@ -51,7 +51,7 @@ my($opt_com_header);
 my($opt_ejs);
 my($opt_odl) = 0;
 my($opt_quiet) = 0;
-my($opt_output);
+my($opt_outputdir) = '.';
 my($opt_verbose) = 0;
 my($opt_warn_compat) = 0;
 
@@ -66,7 +66,7 @@ Usage: pidl [options] <idlfile>
 
 Options:
  --help                this help page
- --output=OUTNAME      put output in OUTNAME.*
+ --outputdir=OUTDIR    put output in OUTDIR/ [.]
  --parse               parse a idl file to a .pidl file
  --dump                dump a pidl file back to idl
  --uint-enums          don't use C enums, instead use uint* types
@@ -94,7 +94,7 @@ Options:
 # main program
 GetOptions (
            'help|h|?' => \$opt_help, 
-           'output=s' => \$opt_output,
+           'outputdir=s' => \$opt_outputdir,
            'parse' => \$opt_parse,
            'dump' => \$opt_dump,
            'uint-enums' => \$opt_uint_enums,
@@ -125,19 +125,13 @@ if ($opt_help) {
 sub process_file($)
 {
        my $idl_file = shift;
-       my $output;
+       my $outputdir = $opt_outputdir;
        my $pidl;
        my $ndr;
 
        my $basename = basename($idl_file, ".idl");
 
-       if (!defined($opt_output)) {
-               $output = $idl_file;
-       } else {
-               $output = $opt_output . $basename;
-       }
-
-       my($pidl_file) = ($opt_keep or Parse::Pidl::Util::ChangeExtension($output, ".pidl"));
+       my($pidl_file) = ($opt_keep or "$outputdir/$basename.pidl");
 
        unless ($opt_quiet) { print "Compiling $idl_file\n"; }
 
@@ -169,7 +163,7 @@ sub process_file($)
        }
 
        if ($opt_diff) {
-               my($tempfile) = Parse::Pidl::Util::ChangeExtension($output, ".tmp");
+               my($tempfile) = "$outputdir/$basename.tmp";
                Parse::Pidl::Util::FileSave($tempfile, IdlDump::Dump($pidl));
                system("diff -wu $idl_file $tempfile");
                unlink($tempfile);
@@ -179,10 +173,10 @@ sub process_file($)
                require Parse::Pidl::Samba::COM::Header;
                my $res = Parse::Pidl::Samba::COM::Header::Parse($pidl);
                if ($res) {
-                       my $comh_filename = ($opt_com_header or (dirname($output) . "/com_$basename.h"));
+                       my $comh_filename = ($opt_com_header or "$outputdir/com_$basename.h");
                        Parse::Pidl::Util::FileSave($comh_filename, 
                        "#include \"librpc/gen_ndr/ndr_orpc.h\"\n" . 
-                       "#include \"librpc/gen_ndr/ndr_$basename.h\"\n" . 
+                       "#include \"$outputdir/ndr_$basename.h\"\n" . 
                        $res);
                }
                $opt_odl = 1;
@@ -192,10 +186,10 @@ sub process_file($)
                require Parse::Pidl::Samba::COM::Proxy;
                my $res = Parse::Pidl::Samba::COM::Proxy::Parse($pidl);
                if ($res) {
-                       my ($client) = ($opt_dcom_proxy or Parse::Pidl::Util::ChangeExtension($output, "_p.c"));
+                       my ($client) = ($opt_dcom_proxy or "$outputdir/$basename\_p.c");
                        Parse::Pidl::Util::FileSave($client, 
                        "#include \"includes.h\"\n" .
-                       "#include \"librpc/gen_ndr/com_$basename.h\"\n" . 
+                       "#include \"$outputdir/com_$basename.h\"\n" . 
                        "#include \"lib/com/dcom/dcom.h\"\n" .$res);
                }
                $opt_odl = 1;
@@ -220,32 +214,27 @@ sub process_file($)
        }
 
        if (defined($opt_header)) {
-               my $header = $opt_header;
-               if ($header eq "") {
-                       $header = Parse::Pidl::Util::ChangeExtension($output, ".h");
-               }
+               my $header = ($opt_header or "$outputdir/ndr_$basename.h");
                require Parse::Pidl::Samba::NDR::Header;
                Parse::Pidl::Util::FileSave($header, Parse::Pidl::Samba::NDR::Header::Parse($pidl));
                if (defined($opt_swig)) {
                  require Parse::Pidl::Samba::SWIG;
-                 my($filename) = $output;
-                 $filename =~ s/\/ndr_/\//;
-                 $filename = ($opt_swig or Parse::Pidl::Util::ChangeExtension($filename, ".i"));
+                 my($filename) = ($opt_swig or "$outputdir/$basename.i");
                  Parse::Pidl::Samba::SWIG::RewriteHeader($pidl, $header, $filename);
                }
        }
 
        if (defined($opt_eth_header)) {
          require Parse::Pidl::Ethereal::NDR::Header;
-         my($eparserhdr) = ($opt_eth_header or (dirname($output) . "/packet-dcerpc-$basename.h"));
+         my($eparserhdr) = ($opt_eth_header or "$outputdir/packet-dcerpc-$basename.h");
 
          Parse::Pidl::Util::FileSave($eparserhdr, Parse::Pidl::Ethereal::NDR::Header::Parse($ndr));
        }
 
-       my $h_filename = Parse::Pidl::Util::ChangeExtension($output, ".h");
+       my $h_filename = "$outputdir/ndr_$basename.h";
        if (defined($opt_client)) {
                require Parse::Pidl::Samba::NDR::Client;
-               my ($client) = ($opt_client or Parse::Pidl::Util::ChangeExtension($output, "_c.c"));
+               my ($client) = ($opt_client or "$outputdir/ndr_$basename\_c.c");
 
                Parse::Pidl::Util::FileSave($client, Parse::Pidl::Samba::NDR::Client::Parse($ndr,$h_filename));
        }
@@ -253,11 +242,9 @@ sub process_file($)
        if (defined($opt_ejs)) {
                require Parse::Pidl::Samba::EJS;
                require Parse::Pidl::Samba::EJSHeader;
-               my $ejs = Parse::Pidl::Util::ChangeExtension($output, "_ejs.c");
-               Parse::Pidl::Util::FileSave($ejs, Parse::Pidl::Samba::EJS::Parse($ndr, $h_filename));
+               Parse::Pidl::Util::FileSave("$outputdir/ndr_$basename\_ejs.c", Parse::Pidl::Samba::EJS::Parse($ndr, $h_filename));
 
-               $ejs = Parse::Pidl::Util::ChangeExtension($output, "_ejs.h");
-               Parse::Pidl::Util::FileSave($ejs, Parse::Pidl::Samba::EJSHeader::Parse($ndr));
+               Parse::Pidl::Util::FileSave("$outputdir/ndr_$basename\_ejs.h", Parse::Pidl::Samba::EJSHeader::Parse($ndr));
        }
 
        if (defined($opt_server)) {
@@ -273,7 +260,7 @@ sub process_file($)
                        }
                }
 
-               Parse::Pidl::Util::FileSave(($opt_server or Parse::Pidl::Util::ChangeExtension($output, "_s.c")), Parse::Pidl::Samba::NDR::Server::Parse($ndr,$h_filename));
+               Parse::Pidl::Util::FileSave(($opt_server or "$outputdir/ndr_$basename\_s.c"), Parse::Pidl::Samba::NDR::Server::Parse($ndr,$h_filename));
 
                if ($dcom ne "") {
                        $dcom = "
@@ -284,19 +271,19 @@ sub process_file($)
 
 $dcom
 ";
-       Parse::Pidl::Util::FileSave(Parse::Pidl::Util::ChangeExtension($output, "_d.c"), $dcom);
+       Parse::Pidl::Util::FileSave("$outputdir/$basename\_d.c", $dcom);
                }
        }
 
        if (defined($opt_parser)) {
-               my $parser = ($opt_parser or Parse::Pidl::Util::ChangeExtension($output, ".c"));
+               my $parser = ($opt_parser or "$outputdir/ndr_$basename.c");
                require Parse::Pidl::Samba::NDR::Parser;
                Parse::Pidl::Util::FileSave($parser, Parse::Pidl::Samba::NDR::Parser::Parse($ndr, $parser));
        }
 
        if (defined($opt_eth_parser)) {
          require Parse::Pidl::Ethereal::NDR::Parser;
-         my($eparser) = ($opt_eth_parser or dirname($output) . "/packet-dcerpc-$basename.c");
+         my($eparser) = ($opt_eth_parser or "$outputdir/packet-dcerpc-$basename.c");
          Parse::Pidl::Util::FileSave($eparser, Parse::Pidl::Ethereal::NDR::Parser::Parse($ndr, $basename, $eparser));
        }
 
index 22858cb57d159183c435778bac63379652e104de..3e4731d9daca5331afe58e37099752481cbcff82 100755 (executable)
@@ -6,7 +6,7 @@ PIDL_EXTRA_ARGS="$*"
 
 [ -d librpc/gen_ndr ] || mkdir -p librpc/gen_ndr || exit 1
 
-PIDL="$PERL -Ibuild/pidl ./build/pidl/pidl --output librpc/gen_ndr/ndr_ --parse --header --parser --server --client --dcom-proxy --com-header --swig --odl --ejs $PIDL_EXTRA_ARGS"
+PIDL="$PERL -Ibuild/pidl ./build/pidl/pidl --outputdir librpc/gen_ndr --parse --header --parser --server --client --dcom-proxy --com-header --swig --odl --ejs $PIDL_EXTRA_ARGS"
 
 if [ x$FULLBUILD = xFULL ]; then
       echo Rebuilding all idl files in librpc/idl