1#!/usr/local/bin/perl
2#
3#ident $Id: vers_string,v 1.2 2010/02/25 14:40:39 lukeh Exp $
4#
5# Implementation of SGS vers_string which uses CVSVersionInfo.txt.
6
7require "cvslib.pl";
8
9$OUTFILE = (-f "version.h") ? "version.h" : "vers.c";
10$AUTHOR = `whoami`;
11$HEADER = '$Id: vers_string,v 1.2 2010/02/25 14:40:39 lukeh Exp $';
12
13if ($ENV{'PROGRAM'}) { $PROGRAM = $ENV{'PROGRAM'}; }
14
15chop($AUTHOR);
16chop($DATE=`date -u`);
17chop($CWD=`pwd`);
18
19($PROJECT, $VERSION) = split(/\-/, &getCVSVersionInfo());
20
21if (!defined($PROJECT)) {
22	$PROJECT = "Unknown";
23	$PROGRAM = "Unknown";
24} else {
25	$SEP = "-";
26	if (!defined($PROGRAM)) {
27		chop($PROGRAM=`basename $CWD`);
28	}
29}
30
31if ($ARGV[0] eq "-f") {
32	print $PROJECT, $SEP, $VERSION, "\n";
33} elsif ($ARGV[0] eq "-l") {
34	print "static const char SGS_VERS[160] = \"";
35	print '@(#)LIBRARY:', $PROGRAM, '  PROJECT:', $PROJECT, $SEP, $VERSION, '  DEVELOPER:', $AUTHOR,  '  BUILT:', $DATE;
36	print "\";\n";
37} elsif ($ARGV[0] eq "-c") {
38	print "const char SGS_VERS[160] = \"";
39	print '@(#)PROGRAM:', $PROGRAM, '  PROJECT:', $PROJECT, $SEP, $VERSION, '  DEVELOPER:', $AUTHOR,  '  BUILT:', $DATE;
40	print "\";\n";
41	print "const char VERS_NUM[10] = \"$VERSION\";\n";
42} elsif ($ARGV[0] eq "-n") {
43	print "$VERSION\n";
44} elsif ($ARGV[0] eq "-B") {
45	print 'PROGRAM:', $PROGRAM, '  PROJECT:', $PROJECT, $SEP, $VERSION, '  DEVELOPER:', $AUTHOR,  '  BUILT:NO DATE SET (-B used)',"\n";
46} elsif ($ARGV[0] eq "-v") {
47	unlink($OUTFILE);
48	open(OUTFILE,">$OUTFILE");
49	print OUTFILE "/* $OUTFILE built by $HEADER */\n";
50	print OUTFILE "\n";
51	if ($OUTFILE eq "version.h") {
52		print OUTFILE "#define USE_SGS_VERS\n\n";
53	}
54	print OUTFILE "const char SGS_VERS[160] = \"";
55	print OUTFILE '@(#)PROGRAM:', $PROGRAM, '  PROJECT:', $PROJECT, $SEP, $VERSION, '  DEVELOPER:', $AUTHOR,  '  BUILT:', $DATE;
56	print OUTFILE "\";\n\n";
57	print OUTFILE "const char VERS_NUM[10] = \"$VERSION\";\n\n";
58	close(OUTFILE);
59} elsif ($ARGV[0] ne "") {
60	print STDERR "$HEADER\n";
61	print STDERR "Copyright (C) 1997-2010 Luke Howard <lukeh\@padl.com>";
62	print STDERR "\n\n";
63	print STDERR "Unknown command line option $ARGV[0].\n";
64	print STDERR "Usage: vers_string [-f|-l|-c|-n|-B|-v]\n";
65	print STDERR "\t-f: echo project-n to stdout\n";
66	print STDERR "\t-l: echo static const char SGS_VERS to stdout\n";
67	print STDERR "\t-c: echo const char VERS_NUM and SGS_VERS to stdout\n";
68	print STDERR "\t-n: echo version number to stdout\n";
69	print STDERR "\t-B: emulate vers_string -B (why?)\n";
70	print STDERR "\t-v: generate $OUTFILE\n";
71	print STDERR "\tother options same as vers_string\n";
72	print STDERR "\n";
73	print STDERR "\tTo attach a project name and version number to a CVS\n";
74	print STDERR "\tmodule, use checkpoint\n";
75	print STDERR "\tTo find out the current project version, type cvsver\n";
76	print STDERR "\tTo create a new project, type cvsnew [project]\n";
77	print STDERR "\tTo sync with an existing project, type cvssync\n";
78	print STDERR "\tTo create a project distribution, type tarup\n";
79	print STDERR "\tTo commit a project, type commit [message]\n";
80} else {
81	print 'PROGRAM:', $PROGRAM, '  PROJECT:', $PROJECT, $SEP, $VERSION, '  DEVELOPER:', $AUTHOR,  '  BUILT:', $DATE;
82	print "\n";
83}
84