#!/usr/bin/env perl # # %CopyrightBegin% # # Copyright Ericsson AB 1999-2016. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # %CopyrightEnd% # use strict; use File::Copy; # This program generates global constants that contains # config.h, CFLAGS and LDFLAGS my $file = ""; my %constants = (); my $prev_file = ""; while (@ARGV) { my $d = shift; if ( $d =~ /^-o$/ ) { $file = shift or die("-o requires argument"); open FILE, "<$file" or next; $prev_file = do { local $/; }; close FILE; next; } if ( $d =~ /^-f/ ) { my $var = shift or die("-f requires two argument"); my $value = shift or die("-f requires two argument"); open FILE, "<$value"; $value = do { local $/; }; close FILE; $value =~ s/\n/\\n\\\n/g; $constants{$var} = $value; } if ( $d =~ /^-v/ ) { my $var = shift or die("-v requires two argument"); my $value = shift; $constants{$var} = $value; } } foreach(keys %constants) { my $value = $constants{$_}; $value =~ s/"/\\"/g; $constants{$_} = $value } # Did we want output to a file? open(my $oldout, ">&STDOUT") or die "Can't dup STDOUT: $!"; if ( $file ) { open STDOUT, ">$file.tmp" or die("can't open $file for writing"); } my(@prog) = split('/', $0); my($prog) = $prog[$#prog]; print "/* Warning: Do not edit this file.\n"; print " Auto-generated by '$prog'.*/\n"; foreach (sort(keys %constants)) { print "const char* erts_build_flags_$_ = \"$constants{$_}\";\n" } open(STDOUT, ">&", $oldout) or die "Can't dup \$oldout: $!"; open FILE, "<$file.tmp"; my $new_file = do { local $/; }; close FILE; if ($new_file ne $prev_file) { move("$file.tmp","$file"); } else { unlink("$file.tmp"); }