compat / vcbuild / scripts / clink.plon commit Git 2.22.1 (75b2f01)
   1#!/usr/bin/perl -w
   2######################################################################
   3# Compiles or links files
   4#
   5# This is a wrapper to facilitate the compilation of Git with MSVC
   6# using GNU Make as the build system. So, instead of manipulating the
   7# Makefile into something nasty, just to support non-space arguments
   8# etc, we use this wrapper to fix the command line options
   9#
  10# Copyright (C) 2009 Marius Storm-Olsen <mstormo@gmail.com>
  11######################################################################
  12use strict;
  13my @args = ();
  14my @cflags = ();
  15my $is_linking = 0;
  16while (@ARGV) {
  17        my $arg = shift @ARGV;
  18        if ("$arg" =~ /^-[DIMGO]/) {
  19                push(@cflags, $arg);
  20        } elsif ("$arg" eq "-o") {
  21                my $file_out = shift @ARGV;
  22                if ("$file_out" =~ /exe$/) {
  23                        $is_linking = 1;
  24                        push(@args, "-OUT:$file_out");
  25                } else {
  26                        push(@args, "-Fo$file_out");
  27                }
  28        } elsif ("$arg" eq "-lz") {
  29                push(@args, "zlib.lib");
  30        } elsif ("$arg" eq "-liconv") {
  31                push(@args, "iconv.lib");
  32        } elsif ("$arg" eq "-lcrypto") {
  33                push(@args, "libeay32.lib");
  34        } elsif ("$arg" eq "-lssl") {
  35                push(@args, "ssleay32.lib");
  36        } elsif ("$arg" eq "-lcurl") {
  37                push(@args, "libcurl.lib");
  38        } elsif ("$arg" =~ /^-L/ && "$arg" ne "-LTCG") {
  39                $arg =~ s/^-L/-LIBPATH:/;
  40                push(@args, $arg);
  41        } elsif ("$arg" =~ /^-R/) {
  42                # eat
  43        } else {
  44                push(@args, $arg);
  45        }
  46}
  47if ($is_linking) {
  48        unshift(@args, "link.exe");
  49} else {
  50        unshift(@args, "cl.exe");
  51        push(@args, @cflags);
  52}
  53#printf("**** @args\n");
  54exit (system(@args) != 0);