view revisions.pl.in @ 1170:e40c65bd8c5d

Allow specific optimization passes to be requested from the command line. Now you can run "`ldc test.d -c -mem2reg -simplifycfg`" if you feel the urge. The -O<N> options are still supported, and are inserted in the passes list in the position where they appear on the command line. (so -simplifycfg -O1 -instcombine does the "right thing") One small change: -inline is renamed to -enable-inlining due to a naming conflict with the option to add the -inline pass. -inline now inserts the inlining pass in the position specified, not in the middle of -O<N>. (ldmd has been updated to translate -inline to -enable-inlining)
author Frits van Bommel <fvbommel wxs.nl>
date Sun, 29 Mar 2009 15:46:55 +0200
parents 165a920f4e88
children c86a629f24dd
line wrap: on
line source

#!/usr/bin/perl

use strict;
use warnings;
use File::stat;
use Time::localtime;

my $llvm_src = `perl @LLVM_CONFIG@ --src-root`;

my $svn_info = `svn info $llvm_src 2>/dev/null`;

my $extra_includes = "";
my $llvm_rev_str;
my $llvm_rev_nr;
my $llvm_date = "";

if ($svn_info =~ /^URL:.*\/trunk\s*$/m && $svn_info =~ /^Last Changed Rev:\s*(\d+)\s*/m) {
    $llvm_rev_str = qq!"LLVM trunk rev. $1"!;
    $llvm_rev_nr = $1;
} else {
    # Either non-trunk or 'svn info' didn't report "Last Changed Rev".
    $extra_includes = qq!#include "llvm/Config/config.h"!;
    $llvm_rev_str = "PACKAGE_STRING";
    # Assume latest release, so < any version we should be testing for.
    $llvm_rev_nr = 0;
}

# Use SVN date even if non-trunk:
if ($svn_info =~ /^Last Changed Date: ([^(]*?)\s*(\(|$)/m) {
    $llvm_date = qq!" ($1)"!;
} else {
    # Otherwise, try to get it from the libdir
    my $llvm_lib = `perl @LLVM_CONFIG@ --libdir`;
    $llvm_lib =~ s/\s+$//;
    if (-d $llvm_lib) {
        my $mod_time = ctime(stat($llvm_lib)->mtime);
        $llvm_date = qq!" ($mod_time)"!;
    }
}

my $ldc_rev = `hg -R@PROJECT_SOURCE_DIR@ log -r qparent --template '{rev}:{node|short} ({date|isodate})' 2>/dev/null || hg -R@PROJECT_SOURCE_DIR@ tip --template '{rev}:{node|short} ({date|isodate})'`;

my $out = qq!#ifndef LDC_VERSIONS_H
#define LDC_VERSIONS_H
$extra_includes

// LLVM version string, for use in -version output
#define LLVM_REV_STR $llvm_rev_str$llvm_date
// LDC version string, for use in -version output
#define LDC_REV "rev. $ldc_rev"

#endif // LDC_VERSIONS_H\n!;

my $revh;
my $old = "";
open $revh, "revisions.h" and $old = join "", <$revh>;

if ($old ne $out) {
	open $revh, ">revisions.h" or die "cannot create revisions.h: $!";
	print $revh $out;
	close $revh;
}

# Allow the user to manually define it on the command line...
$out = qq!#ifndef LLVM_REV

// LLVM svn revision number, used to adapt to changes in LLVM
// (Is 0 if LLVM is not an SVN trunk version)
#define LLVM_REV $llvm_rev_nr

#endif // LLVM_REV\n!;

$old = "";
open $revh, "llvm-version.h" and $old = join "", <$revh>;

if ($old ne $out) {
	open $revh, ">llvm-version.h" or die "cannot create llvm-version.h: $!";
	print $revh $out;
	close $revh;
}