makeversion.pl revision 247bf378605811d695e968dbe930a7fc45c0038e
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer#!/usr/bin/perl
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer#
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer * Copyright (C) 2004, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer * Copyright (C) 2001 Internet Software Consortium.
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer *
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews * Permission to use, copy, modify, and/or distribute this software for any
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer * purpose with or without fee is hereby granted, provided that the above
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews * copyright notice and this permission notice appear in all copies.
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer *
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews * PERFORMANCE OF THIS SOFTWARE.
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer# $Id$
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews# This script takes the version information from the version file located
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews# at the root of the source tree and the api files in each library directory
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews# and writes the resulting information into a version.h file that the build
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews# process uses to build the executable code.
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews# This program was written by PDM. danny.mayer@nominum.com 1-Jul-2001.
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews# List of directories with version files
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews@dirlist = ("isc","dns","isccc","isccfg","lwres","bind9");
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews$LibMacros{"isc"} = "LIBISC_EXPORTS";
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews$LibMacros{"dns"} = "LIBDNS_EXPORTS";
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews$LibMacros{"isccc"} = "LIBISCCC_EXPORTS";
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews$LibMacros{"isccfg"} = "LIBISCCFG_EXPORTS";
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews$LibMacros{"lwres"} = "LIBLWRES_EXPORTS";
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews$LibMacros{"bind9"} = "LIBBIND9_EXPORTS";
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews@VersionNames = ("LIBINTERFACE", "LIBREVISION", "LIBAGE");
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews$versionfile = "versions.h";
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews$versionpath = "../$versionfile";
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews
cc51cd2d2076e33117c60c9effcb8caccde4983bWitold Krecicki#
cc51cd2d2076e33117c60c9effcb8caccde4983bWitold Krecicki# First get the version information
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer#
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrewsopen (VERSIONFILE, "../version");
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrewswhile (<VERSIONFILE>) {
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer chomp;
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews ($data) = split(/\#/);
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews if($data) {
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews ($name, $value) = split(/=/,$data);
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews ($name) = split(/\s+/, $name);
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews ($value) = split(/\s+/, $value);
cc51cd2d2076e33117c60c9effcb8caccde4983bWitold Krecicki $Versions{$name} = $value;
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews }
cc51cd2d2076e33117c60c9effcb8caccde4983bWitold Krecicki}
cc51cd2d2076e33117c60c9effcb8caccde4983bWitold Krecickiclose(VERSIONFILE);
cc51cd2d2076e33117c60c9effcb8caccde4983bWitold Krecicki
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews# Now set up the output version file
cc51cd2d2076e33117c60c9effcb8caccde4983bWitold Krecicki
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews$ThisDate = scalar localtime();
cc51cd2d2076e33117c60c9effcb8caccde4983bWitold Krecickiopen (OUTVERSIONFILE, ">$versionpath") ||
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer die "Can't open output file $versionpath: $!";
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews#Standard Header
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrewsprint OUTVERSIONFILE '/*
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews * Copyright (C) 2001 Internet Software Consortium.
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer *
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews * Permission to use, copy, modify, and distribute this software for any
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews * purpose with or without fee is hereby granted, provided that the above
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer * copyright notice and this permission notice appear in all copies.
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews *
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
cc51cd2d2076e33117c60c9effcb8caccde4983bWitold Krecicki * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews */
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer';
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrews
132410d33fa565dd5a4254a1aca17ccd4e872a27Mark Andrewsprint OUTVERSIONFILE "/*\n";
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayerprint OUTVERSIONFILE " * $versionfile.";
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayerprint OUTVERSIONFILE " Generated automatically by makeversion.pl.\n";
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayerprint OUTVERSIONFILE " * Date generated: $ThisDate\n";
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayerprint OUTVERSIONFILE " */\n\n";
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayerprint OUTVERSIONFILE '
5236050c0f819b727dfc4850133f5194f346f76fDanny Mayer#ifndef VERSIONS_H
#define VERSIONS_H 1
';
$Version = "$Versions{'MAJORVER'}.$Versions{'MINORVER'}.$Versions{'PATCHVER'}";
$Version = "$Version$Versions{'RELEASETYPE'}$Versions{'RELEASEVER'}";
print "BIND Version: $Version\n";
print OUTVERSIONFILE "#define VERSION \"$Version\"\n\n";
foreach $dir (@dirlist) {
$apifile = "../lib/$dir/api";
open (APIVERSION, $apifile);
while (<APIVERSION>) {
chomp;
($data) = split(/\#/);
if ($data) {
($name, $value) = split(/=/, $data);
$name =~ s/\s+//;
$value =~ s/\s+//;
$ApiVersions{$name} = $value;
}
}
print OUTVERSIONFILE "\n#ifdef $LibMacros{$dir}\n";
foreach $name (@VersionNames) {
print OUTVERSIONFILE "#define $name\t$ApiVersions{$name}\n";
}
print OUTVERSIONFILE "#endif\n\n";
}
print OUTVERSIONFILE "#endif /* VERSIONS_H */\n";
close OUTVERSIONFILE;