version.pl (4015B)
1 #!/usr/bin/env perl 2 ## 3 ## Copyright (c) 2016, Alliance for Open Media. All rights reserved. 4 ## 5 ## This source code is subject to the terms of the BSD 2 Clause License and 6 ## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License 7 ## was not distributed with this source code in the LICENSE file, you can 8 ## obtain it at www.aomedia.org/license/software. If the Alliance for Open 9 ## Media Patent License 1.0 was not distributed with this source code in the 10 ## PATENTS file, you can obtain it at www.aomedia.org/license/patent. 11 ## 12 use strict; 13 use warnings; 14 use 5.010; 15 use Getopt::Long; 16 17 my $git_desc = ''; 18 my $version_data; 19 my $version_filename; 20 GetOptions('version_data=s' => \$version_data, 21 'version_filename=s' => \$version_filename) or 22 die("Invalid arg(s): $!"); 23 24 if (!defined $version_data || length($version_data) == 0 || 25 !defined $version_filename || length($version_filename) == 0) { 26 die("--version_data and --version_filename are required."); 27 } 28 29 # Determine if $version_data is a filename or a git tag/description. 30 my $version_string; 31 chomp($version_data); 32 if (-r $version_data) { 33 # $version_data is the path to the CHANGELOG. Parse the most recent version. 34 my $changelog_filename = $version_data; 35 open(my $changelog_file, '<', $changelog_filename) or 36 die("Unable to open CHANGELOG @ $changelog_filename: $!."); 37 38 while (my $line = <$changelog_file>) { 39 my @split_line = split(" ", $line, 3); 40 next if @split_line < 2; 41 $version_string = $split_line[1]; 42 last if substr($version_string, 0, 1) eq "v"; 43 } 44 close($changelog_file); 45 } else { 46 # $version_data is either a tag name or a full git description, one of: 47 # tagName OR tagName-commitsSinceTag-shortCommitHash 48 # In either case we want the first element of the array returned by split. 49 $version_string = (split("-", $version_data))[0]; 50 $git_desc = $version_data; 51 } 52 53 if (substr($version_string, 0, 1) eq "v") { 54 $version_string = substr($version_string, 1); 55 } 56 57 my @version_components = split('\.', $version_string, 4); 58 my $version_major = $version_components[0]; 59 my $version_minor = $version_components[1]; 60 my $version_patch = $version_components[2]; 61 62 my $version_extra = ""; 63 if (length($git_desc) > 0) { 64 my @git_desc_components = split('-', $git_desc, 2); 65 if (@git_desc_components > 1) { 66 $version_extra = $git_desc_components[1]; 67 } 68 } 69 70 open(my $version_file, '>', $version_filename) or 71 die("Cannot open $version_filename: $!"); 72 73 my $version_packed = "((VERSION_MAJOR << 16) | (VERSION_MINOR << 8) | (VERSION_PATCH))"; 74 my $year = (localtime)[5] + 1900; 75 my $lic_block = << "EOF"; 76 /* 77 * Copyright (c) $year, Alliance for Open Media. All rights reserved. 78 * 79 * This source code is subject to the terms of the BSD 2 Clause License and 80 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License 81 * was not distributed with this source code in the LICENSE file, you can 82 * obtain it at www.aomedia.org/license/software. If the Alliance for Open 83 * Media Patent License 1.0 was not distributed with this source code in the 84 * PATENTS file, you can obtain it at www.aomedia.org/license/patent. 85 */ 86 EOF 87 88 select $version_file; 89 if (length($git_desc)) { 90 print << "EOF"; 91 $lic_block 92 #ifndef AOM_VERSION_H_ 93 #define AOM_VERSION_H_ 94 #define VERSION_MAJOR $version_major 95 #define VERSION_MINOR $version_minor 96 #define VERSION_PATCH $version_patch 97 #define VERSION_EXTRA \"$version_extra\" 98 #define VERSION_PACKED \\ 99 $version_packed 100 #define VERSION_STRING_NOSP \"$git_desc\" 101 #define VERSION_STRING \" $git_desc\" 102 #endif // AOM_VERSION_H_ 103 EOF 104 } else { 105 print << "EOF"; 106 $lic_block 107 #ifndef AOM_VERSION_H_ 108 #define AOM_VERSION_H_ 109 #define VERSION_MAJOR $version_major 110 #define VERSION_MINOR $version_minor 111 #define VERSION_PATCH $version_patch 112 #define VERSION_EXTRA \"$version_extra\" 113 #define VERSION_PACKED \\ 114 $version_packed 115 #define VERSION_STRING_NOSP \"v$version_string\" 116 #define VERSION_STRING \" v$version_string\" 117 #endif // AOM_VERSION_H_ 118 EOF 119 } 120 close($version_file);