From 82f5d1d61d77403ddee3c8da4733153ab731b601 Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Thu, 2 Apr 2015 01:38:31 +0100 Subject: [PATCH 1/4] Remove an old Autotools limitation. This is not needed anymore as support for Autotools was removed. --- CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e1f2bf882..9759c3c34 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,11 +10,6 @@ if(COMMAND cmake_policy) endif(POLICY CMP0007) endif(COMMAND cmake_policy) -# If the Source dir and the Binary dir are the same, we are building in-source, which we will disallow due to Autotools being there (but only on non-Windows) -if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR} AND NOT WIN32) - message(FATAL_ERROR "You can not use CMake to build Anope from the root of it's source tree! Remove the CMakeCache.txt file from this directory, then create a separate directory (either below this directory or elsewhere), and then re-run CMake from there.") -endif(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR} AND NOT WIN32) - # Set the project as C++ primarily, but have C enabled for the checks required later project(Anope CXX) enable_language(C) From 5baa6247a9e436c653c7cc4c3e757a081f9bbc97 Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Thu, 2 Apr 2015 01:43:05 +0100 Subject: [PATCH 2/4] Don't overwrite CMAKE_INSTALL_PREFIX if it has already been set. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9759c3c34..5bbca11c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -377,7 +377,7 @@ endif(PERL AND USE_RUN_CC_PL) # If a INSTDIR was passed in to CMake, use it as the install prefix, otherwise set the default install prefix to the services directory under the user's home directory if(INSTDIR) set(CMAKE_INSTALL_PREFIX "${INSTDIR}") -else(INSTDIR) +elseif(NOT CMAKE_INSTALL_PREFIX) set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/services") endif(INSTDIR) From 0f1936f63d0207d7a1ab4a4d06a0d3b80891f6ee Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Sat, 4 Apr 2015 03:28:46 +0100 Subject: [PATCH 3/4] Fix matching the Apple Clang variant on CMake 3.0+ --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5bbca11c5..4fc8185d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,7 +81,7 @@ set(DEFAULT_LIBRARY_DIRS) set(DEFAULT_INCLUDE_DIRS) # If we are using a GNU compiler (have to use CXX because it seems to fail on C), we will be able to determine it's default paths for libraries and includes -if(CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") +if(CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang$") # First look for the compiler's default library directories execute_process(COMMAND ${CMAKE_C_COMPILER} -print-search-dirs OUTPUT_VARIABLE LINES OUTPUT_STRIP_TRAILING_WHITESPACE) # Find only the part after "libraries: " @@ -147,7 +147,7 @@ if(CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") if(DEFAULT_INCLUDE_DIRS) remove_list_duplicates(DEFAULT_INCLUDE_DIRS) endif(DEFAULT_INCLUDE_DIRS) -endif(CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") +endif(CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang$") # If we are using Visual Studio, locate the path of the Windows Server 2008 SDK or Windows Server 2003 Platform SDK, depending on which is installed if(MSVC) From 2f9eabdb7237f607169ec0576b1cb7945db83304 Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Sun, 17 May 2015 21:27:09 +0100 Subject: [PATCH 4/4] Remove support for run-cc. This tool is not useful anymore. It just slows the build down. --- CMakeLists.txt | 10 --- Config | 32 ------- run-cc.pl | 226 ------------------------------------------------- 3 files changed, 268 deletions(-) delete mode 100755 run-cc.pl diff --git a/CMakeLists.txt b/CMakeLists.txt index 4fc8185d3..96387c738 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -223,8 +223,6 @@ endif(EXTRA_LIBS) # Find gettext find_package(Gettext) -# Add an optional variable for using run-cc.pl for building, Perl will be checked later regardless of this setting -option(USE_RUN_CC_PL "Use run-cc.pl for building" OFF) option(USE_PCH "Use precompiled headers" OFF) # Use the following directories as includes @@ -365,14 +363,6 @@ find_program(GREP grep) find_program(SH sh) find_program(CHGRP chgrp) find_program(CHMOD chmod) -find_program(PERL perl) - -# If perl is included on the system and the user wants to use run-cc.pl, change the commands for compiling and linking -if(PERL AND USE_RUN_CC_PL) - set(CMAKE_CXX_COMPILE_OBJECT "${PERL} ${Anope_SOURCE_DIR}/run-cc.pl -q ${CMAKE_CXX_COMPILE_OBJECT}") - set(CMAKE_CXX_LINK_EXECUTABLE "${PERL} ${Anope_SOURCE_DIR}/run-cc.pl -q ${CMAKE_CXX_LINK_EXECUTABLE}") - set(CMAKE_CXX_CREATE_SHARED_MODULE "${PERL} ${Anope_SOURCE_DIR}/run-cc.pl -q ${CMAKE_CXX_CREATE_SHARED_MODULE}") -endif(PERL AND USE_RUN_CC_PL) # If a INSTDIR was passed in to CMake, use it as the install prefix, otherwise set the default install prefix to the services directory under the user's home directory if(INSTDIR) diff --git a/Config b/Config index ed7a0509c..28f046150 100755 --- a/Config +++ b/Config @@ -62,12 +62,6 @@ Run_Build_System () { BUILD_TYPE="-DCMAKE_BUILD_TYPE:STRING=RELEASE" fi - if [ "$USE_RUN_CC_PL" = "yes" ] ; then - RUN_CC_PL="-DUSE_RUN_CC_PL:BOOLEAN=ON" - else - RUN_CC_PL="-DUSE_RUN_CC_PL:BOOLEAN=OFF" - fi - if [ "$USE_PCH" = "yes" ] ; then PCH="-DUSE_PCH:BOOLEAN=ON" else @@ -131,7 +125,6 @@ INSTDIR=$HOME/services RUNGROUP= UMASK= DEBUG="no" -USE_RUN_CC_PL="no" USE_PCH="no" EXTRA_INCLUDE_DIRS= EXTRA_LIB_DIRS= @@ -321,30 +314,6 @@ echo "" #### -TEMP_YN="n" -if [ "$USE_RUN_CC_PL" = "yes" ] ; then - TEMP_YN="y" -fi -echo "You can optionally have the build run through run-cc.pl, which will" -echo "cause warnings and errors (if any) to be colored yellow and red," -echo "respectively. This relies on Perl being installed, so if you say yes" -echo "to this without Perl, the option will be ignored." -echo "NOTE: If you are using MinGW, it is NOT recommended to say yes to" -echo "this, it may fail." -echo "Would you like to utilize run-cc.pl?" -echo2 "[$TEMP_YN] " -read YN -if [ "$YN" ] ; then - if [ "$YN" = "y" ] ; then - USE_RUN_CC_PL="yes" - else - USE_RUN_CC_PL="no" - fi -fi -echo "" - -#### - TEMP_YN="n" if [ "$USE_PCH" = "yes" ] ; then TEMP_YN="y" @@ -426,7 +395,6 @@ INSTDIR="$INSTDIR" RUNGROUP="$RUNGROUP" UMASK=$UMASK DEBUG="$DEBUG" -USE_RUN_CC_PL="$USE_RUN_CC_PL" USE_PCH="$USE_PCH" EXTRA_INCLUDE_DIRS="$EXTRA_INCLUDE_DIRS" EXTRA_LIB_DIRS="$EXTRA_LIB_DIRS" diff --git a/run-cc.pl b/run-cc.pl deleted file mode 100755 index fe28dee10..000000000 --- a/run-cc.pl +++ /dev/null @@ -1,226 +0,0 @@ -#!/usr/bin/env perl - -### THIS IS DESIGNED TO BE RUN BY MAKE! DO NOT RUN FROM THE SHELL (because it MIGHT sigterm the shell)! ### - -use strict; -use warnings FATAL => qw(all); - -use POSIX (); - -# Runs the compiler, passing it the given arguments. -# Filters select output from the compiler's standard error channel and -# can take different actions as a result. - -# NOTE: this is *NOT* a hash (sadly: a hash would stringize all the regexes and thus render them useless, plus you can't index a hash based on regexes anyway) -# even though we use the => in it. - -# The subs are passed the message, and anything the regex captured. - -my $flag = shift(@ARGV); -my $quiet = 0; -my $cc; -if ($flag eq "-q") { - $quiet = 1; - $cc = shift(@ARGV); -} -else { - $cc = $flag; -} - -my $showncmdline = 0; - -# GCC's "location of error stuff", which accumulates the "In file included from" include stack -my $location = ""; - -my @msgfilters = ( - [ qr/^(.*) warning: cannot pass objects of non-POD type `(.*)' through `\.\.\.'; call will abort at runtime/ => sub { - my ($msg, $where, $type) = @_; - my $errstr = $location . "$where error: cannot pass objects of non-POD type `$type' through `...'\n"; - $location = ""; - if ($type =~ m/::(basic_)?string/) { - $errstr .= "$where (Did you forget to call c_str()?)\n"; - } - die $errstr; - } ], - - # Start of an include stack. - [ qr/^In file included from .*[,:]$/ => sub { - my ($msg) = @_; - $location = "$msg\n"; - return undef; - } ], - - # Continuation of an include stack. - [ qr/^ from .*[,:]$/ => sub { - my ($msg) = @_; - $location .= "$msg\n"; - return undef; - } ], - - # A function, method, constructor, or destructor is the site of a problem - [ qr/In ((con|de)structor|(member )?function)/ => sub { - my ($msg) = @_; - # If a complete location string is waiting then probably we dropped an error, so drop the location for a new one. - if ($location =~ m/In ((con|de)structor|(member )?function)/) { - $location = "$msg\n"; - } else { - $location .= "$msg\n"; - } - return undef; - } ], - - [ qr/^.* warning: / => sub { - my ($msg) = @_; - my $str = $location . "\e[33;1m$msg\e[0m\n"; - $showncmdline = 1; - $location = ""; - return $str; - } ], - - [ qr/^.* error: / => sub { - my ($msg) = @_; - my $str = ""; - $str = "An error occured when executing:\e[37;1m $cc " . join(' ', @ARGV) . "\n" unless $showncmdline; - $showncmdline = 1; - $str .= $location . "\e[31;1m$msg\e[0m\n"; - $location = ""; - return $str; - } ], - - [ qr/./ => sub { - my ($msg) = @_; - $msg = $location . $msg; - $location = ""; - $msg =~ s/std::basic_string\, std::allocator\ \>(\s+|)/std::string/g; - $msg =~ s/std::basic_string\ \>(\s+|)/irc::string/g; - $msg =~ s/std::basic_string\ \>(\s+|)/ci::string/g; - for my $stl (qw(deque vector list)) { - $msg =~ s/std::$stl\<(\S+), std::allocator\<\1\> \>/std::$stl\<$1\>/g; - $msg =~ s/std::$stl\<(std::pair\<\S+, \S+\>), std::allocator\<\1 \> \>/std::$stl<$1 >/g; - } - $msg =~ s/std::map\<(\S+), (\S+), std::less\<\1\>, std::allocator\ \> \>/std::map<$1, $2>/g; - # Warning: These filters are GNU C++ specific! - $msg =~ s/__gnu_cxx::__normal_iterator\<(\S+)\*, std::vector\<\1\> \>/std::vector<$1>::iterator/g; - $msg =~ s/__gnu_cxx::__normal_iterator\<(std::pair\<\S+, \S+\>)\*, std::vector\<\1 \> \>/std::vector<$1 >::iterator/g; - $msg =~ s/__gnu_cxx::__normal_iterator\/std::string::iterator/g; - $msg =~ s/__gnu_cxx::__normal_iterator\/irc::string::iterator/g; - $msg =~ s/__gnu_cxx::__normal_iterator\/ci::string::iterator/g; - return $msg; - } ], -); - -my $pid; - -my ($r_stderr, $w_stderr); - -my $name = ""; -my $action = ""; - -if ($cc eq "ar") { - $name = $ARGV[1]; - $action = "ARCHIVE"; -} else { - foreach my $n (@ARGV) - { - if ($n =~ /\.cpp|\.c$/) - { - if ($action eq "BUILD") - { - $name .= " " . $n; - } - else - { - $action = "BUILD"; - $name = $n; - } - } - elsif ($action eq "BUILD") # .cpp has priority. - { - next; - } - elsif ($n eq "-o") - { - $action = $name = $n; - } - elsif ($name eq "-o") - { - $action = "LINK"; - $name = $n; - } - } -} - -if (!defined($cc) || $cc eq "") { - die "Compiler not specified!\n"; -} - -pipe($r_stderr, $w_stderr) or die "pipe stderr: $!\n"; - -$pid = fork; - -die "Cannot fork to start $cc! $!\n" unless defined($pid); - -if ($pid) { - - if ($quiet == 0) { - printf "\t\e[1;32m%-20s\e[0m%s\n", $action . ":", $name unless $name eq ""; - } - - my $fail = 0; - # Parent - Close child-side pipes. - close $w_stderr; - # Close STDIN to ensure no conflicts with child. - close STDIN; - # Now read each line of stderr -LINE: while (defined(my $line = <$r_stderr>)) { - chomp $line; - - for my $filter (@msgfilters) { - my @caps; - if (@caps = ($line =~ $filter->[0])) { - $@ = ""; - $line = eval { - $filter->[1]->($line, @caps); - }; - if ($@) { - # Note that $line is undef now. - $fail = 1; - print STDERR $@; - } - next LINE unless defined($line); - } - } - # Chomp off newlines again, in case the filters put some back in. - chomp $line; - print STDERR "$line\n"; - } - waitpid $pid, 0; - close $r_stderr; - my $exit = $?; - # Simulate the same exit, so make gets the right termination info. - if (POSIX::WIFSIGNALED($exit)) { - # Make won't get the right termination info (it gets ours, not the compiler's), so we must tell the user what really happened ourselves! - print STDERR "$cc killed by signal " . POSIX::WTERMSIGN($exit) . "\n"; - kill "TERM", getppid(); # Needed for bsd make. - kill "TERM", $$; - } - else { - if (POSIX::WEXITSTATUS($exit) == 0) { - if ($fail) { - kill "TERM", getppid(); # Needed for bsd make. - kill "TERM", $$; - } - exit 0; - } else { - exit POSIX::WEXITSTATUS($exit); - } - } -} else { - # Child - Close parent-side pipes. - close $r_stderr; - # Divert stderr - open STDERR, ">&", $w_stderr or die "Cannot divert STDERR: $!\n"; - # Run the compiler! - exec { $cc } $cc, @ARGV; - die "exec $cc: $!\n"; -}