ref: 50cd3b2fbb9a3993164e0ff25f700b8fe9d27e9f
dir: /common/id3lib/acconfig/
#! /usr/bin/perl $VERSION="0.10"; $PREFIX="/usr/local"; # -* perl *- # Copyright (C) 1988 Eleftherios Gkioulekas <[email protected]> # # This program is free software; you can redistribute it and/or 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., 675 Mass Ave, Cambridge, MA 02139, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a configuration # script generated by Autoconf, you may include it under the same # distribution terms that you use for the rest of that program. # ======================= # == Usage information == # ======================= sub usage { print <<"EOF"; Usage: % acconfig Options: --help Print this message --version Show version information Purpose: This utility parses aclocal.m4 and creates an appropriate acconfig.h. In your m4 files put the following lines: dnl ACCONFIG [BOTTOM | TOP | TEMPLATE] dnl ..... dnl END ACCONFIG Everything that appears in ... will be included in acconfig.h The parameter [bottom|top|template] determines where in acconfig.h the enclosed text is meant to appear. EOF exit(0); } sub version { print <<"EOF"; acconfig $VERSION - Automatic generator for acconfig.h Copyright (C) 1998 Eleftherios Gkioulekas <lf\@amath.washington.edu> This is free software, and you are welcome to redistribute it and modify it under certain conditions. There is ABSOLUTELY NO WARRANTY for this software. For details refer to version 2 of the GNU General Public License. EOF exit(0); } sub invalid { print "Invalid usage. For help:\n"; print "% acconfig --help\n"; exit(1); } sub throw_error { local($errormsg) = @_; print "line $line: $errormsg \n"; exit(1); } # ================== # == The main fun == # ================== # No more than one argument do invalid() if ($#ARGV > 0); # If there is one argument then check for --version or --help if ($#ARGV == 0) { do version() if ($ARGV[0] eq "--version"); do usage() if ($ARGV[0] eq "--help"); # else, invalid usage do invalid(); } # Load the aclocal.m4 file in memory open(FILE,"aclocal.m4") || die "Can't open aclocal.m4: $!"; @aclocal_content = <FILE>; close(FILE); # Load the configure.in file in memory open(FILE,"configure.in") || die "Can't open configure.in: $!"; @configure_in_content = <FILE>; @aclocal_content = (@aclocal_content, @configure_in_content); close(FILE); # Strip the carriage returns for each line chop(@aclocal_content); # Initialize contents of acconfig.h $bottom_content = ""; $top_content = ""; $template_content = ""; # Initialize the state of the parser # 0 if outside @acconfig # 1 if inside and it is bottom # 2 if inside and it is top # 3 if inside and it is template $inside_acconfig = 0; # Now loop over the contents of aclocal.m4 and do it $line = 0; foreach (@aclocal_content) { # # Do these things if we are in state 0 # if ($inside_acconfig == 0) { # Detect whether the current line is a directive to switch state if (/^dnl ACCONFIG BOTTOM/) { $inside_acconfig = 1; } elsif (/^dnl ACCONFIG TOP/) { $inside_acconfig = 2; } elsif (/^dnl ACCONFIG TEMPLATE/) { $inside_acconfig = 3; } # Catch a couple of possible errors elsif (/^dnl ACCONFIG/) { throw_error("invalid ACCONFIG directive."); } elsif (/^dnl END/) { throw_error("unmatched END directive."); } } # # Do these things if we are in state 1, 2 or 3 # elsif ($inside_acconfig == 1 || $inside_acconfig == 2 || $inside_acconfig == 3) { # Detect whether we go back to state 0 if (/^dnl END ACCONFIG/) { $inside_acconfig = 0; } # If this is an ordinary dnl line then add it to bottom_content elsif (/^dnl/) { # Get rid of the dnl prefix s/^dnl //g; # Add the line to the appropriate content variable if ($inside_acconfig == 1) { $bottom_content = $bottom_content . $_ . "\n"; } if ($inside_acconfig == 2) { $top_content = $top_content . $_ . "\n"; } if ($inside_acconfig == 3) { $template_content = $template_content . $_ . "\n"; } } # If this is something else, then that's an error! else { throw_error("non-dnl line while inside ACCONFIG."); } } else { throw_error("INTERNAL ERROR: invalid value for inside_acconfig."); } # Increase the line number by one $line = $line + 1; } # Now generate acconfig.h open(OUT,">acconfig.h"); print OUT <<"END"; /* ** This file has been automatically generated by 'acconfig' from aclocal.m4 ** Copyright (C) 1988 Eleftherios Gkioulekas <lf\@amath.washington.edu> ** ** This file is free software; as a special exception the author gives ** unlimited permission to copy and/or distribute it, with or without ** modifications, as long as this notice is preserved. ** ** This program is distributed in the hope that it will be useful, but ** WITHOUT ANY WARRANTY, to the extent permitted by law; without even the ** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /* This is the top section */ $top_content \@TOP\@ /* This is the template section */ /* These are standard for all packages using Automake */ #undef PACKAGE #undef VERSION /* And now the rest of the boys */ $template_content \@BOTTOM\@ /* This is the bottom section */ $bottom_content END close(OUT);