summaryrefslogtreecommitdiff
path: root/src/third_party/asio-master/asio/release.pl
diff options
context:
space:
mode:
authorSpencer Jackson <spencer.jackson@mongodb.com>2017-04-27 15:06:37 -0400
committerSpencer Jackson <spencer.jackson@mongodb.com>2017-06-05 16:59:32 -0400
commit53ea0fc6d9fa51e68e05b54c5064b99826713467 (patch)
treec0e30494d1d88beea93da5c162bb8a7337799fc1 /src/third_party/asio-master/asio/release.pl
parentff41e9df657f70900bc812d29346790370f7d177 (diff)
downloadmongo-53ea0fc6d9fa51e68e05b54c5064b99826713467.tar.gz
SERVER-29020 Upgrade vendored copy of ASIO to 524288cb4fcf84664b3dc39cb4424c7509969b92
Diffstat (limited to 'src/third_party/asio-master/asio/release.pl')
-rwxr-xr-xsrc/third_party/asio-master/asio/release.pl439
1 files changed, 439 insertions, 0 deletions
diff --git a/src/third_party/asio-master/asio/release.pl b/src/third_party/asio-master/asio/release.pl
new file mode 100755
index 00000000000..332760c8d8f
--- /dev/null
+++ b/src/third_party/asio-master/asio/release.pl
@@ -0,0 +1,439 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Cwd qw(abs_path getcwd);
+use Date::Format;
+use File::Path;
+use File::Copy;
+use File::Basename;
+
+our $version_major;
+our $version_minor;
+our $version_sub_minor;
+our $asio_name;
+our $boost_asio_name;
+
+sub print_usage_and_exit
+{
+ print("usage: ./release.pl <version>\n");
+ print(" or: ./release.pl --package-asio\n");
+ print("\n");
+ print("examples:\n");
+ print(" create new version and build packages for asio and boost.asio:\n");
+ print(" ./release.pl 1.2.0\n");
+ print(" create packages for asio only:\n");
+ print(" ./release.pl --package-asio\n");
+ exit(1);
+}
+
+sub determine_version($)
+{
+ my $version_string = shift;
+ if ($version_string =~ /^([0-9]+)\.([0-9]+)\.([0-9]+)$/)
+ {
+ our $version_major = $1;
+ our $version_minor = $2;
+ our $version_sub_minor = $3;
+
+ our $asio_name = "asio";
+ $asio_name .= "-$version_major";
+ $asio_name .= ".$version_minor";
+ $asio_name .= ".$version_sub_minor";
+
+ our $boost_asio_name = "boost_asio";
+ $boost_asio_name .= "_$version_major";
+ $boost_asio_name .= "_$version_minor";
+ $boost_asio_name .= "_$version_sub_minor";
+ }
+ else
+ {
+ print_usage_and_exit();
+ }
+}
+
+sub determine_version_from_configure()
+{
+ my $from = "configure.ac";
+ open(my $input, "<$from") or die("Can't open $from for reading");
+ while (my $line = <$input>)
+ {
+ chomp($line);
+ if ($line =~ /^AC_INIT\(asio.*\[(.*)\]\)$/)
+ {
+ our $asio_name = "asio-$1";
+ our $boost_asio_name = "boost_asio_$1";
+ last;
+ }
+ }
+}
+
+sub update_configure_ac
+{
+ # Open the files.
+ my $from = "configure.ac";
+ my $to = $from . ".tmp";
+ open(my $input, "<$from") or die("Can't open $from for reading");
+ open(my $output, ">$to") or die("Can't open $to for writing");
+
+ # Copy the content.
+ while (my $line = <$input>)
+ {
+ chomp($line);
+ if ($line =~ /^AC_INIT\(asio.*\)$/)
+ {
+ $line = "AC_INIT(asio, [";
+ $line .= "$version_major.$version_minor.$version_sub_minor";
+ $line .= "])";
+ }
+ print($output "$line\n");
+ }
+
+ # Close the files and move the temporary output into position.
+ close($input);
+ close($output);
+ move($to, $from);
+ unlink($to);
+}
+
+sub update_readme
+{
+ # Open the files.
+ my $from = "README";
+ my $to = $from . ".tmp";
+ open(my $input, "<$from") or die("Can't open $from for reading");
+ open(my $output, ">$to") or die("Can't open $to for writing");
+
+ # Copy the content.
+ while (my $line = <$input>)
+ {
+ chomp($line);
+ if ($line =~ /^asio version/)
+ {
+ $line = "asio version ";
+ $line .= "$version_major.$version_minor.$version_sub_minor";
+ }
+ elsif ($line =~ /^Released/)
+ {
+ my @time = localtime;
+ $line = "Released " . strftime("%A, %d %B %Y", @time) . ".";
+ }
+ print($output "$line\n");
+ }
+
+ # Close the files and move the temporary output into position.
+ close($input);
+ close($output);
+ move($to, $from);
+ unlink($to);
+}
+
+sub update_asio_version_hpp
+{
+ # Open the files.
+ my $from = "include/asio/version.hpp";
+ my $to = $from . ".tmp";
+ open(my $input, "<$from") or die("Can't open $from for reading");
+ open(my $output, ">$to") or die("Can't open $to for writing");
+
+ # Copy the content.
+ while (my $line = <$input>)
+ {
+ chomp($line);
+ if ($line =~ /^#define ASIO_VERSION /)
+ {
+ my $version = $version_major * 100000;
+ $version += $version_minor * 100;
+ $version += $version_sub_minor + 0;
+ $line = "#define ASIO_VERSION " . $version;
+ $line .= " // $version_major.$version_minor.$version_sub_minor";
+ }
+ print($output "$line\n");
+ }
+
+ # Close the files and move the temporary output into position.
+ close($input);
+ close($output);
+ move($to, $from);
+ unlink($to);
+}
+
+sub update_boost_asio_version_hpp
+{
+ # Open the files.
+ my $from = "../boost/boost/asio/version.hpp";
+ my $to = $from . ".tmp";
+ open(my $input, "<$from") or die("Can't open $from for reading");
+ open(my $output, ">$to") or die("Can't open $to for writing");
+
+ # Copy the content.
+ while (my $line = <$input>)
+ {
+ chomp($line);
+ if ($line =~ /^#define BOOST_ASIO_VERSION /)
+ {
+ my $version = $version_major * 100000;
+ $version += $version_minor * 100;
+ $version += $version_sub_minor + 0;
+ $line = "#define BOOST_ASIO_VERSION " . $version;
+ $line .= " // $version_major.$version_minor.$version_sub_minor";
+ }
+ print($output "$line\n");
+ }
+
+ # Close the files and move the temporary output into position.
+ close($input);
+ close($output);
+ move($to, $from);
+ unlink($to);
+}
+
+sub build_asio_doc
+{
+ $ENV{BOOST_ROOT} = abs_path("../boost");
+ system("rm -rf doc");
+ my $bjam = abs_path(glob("../boost/bjam"));
+ chdir("src/doc");
+ system("$bjam clean");
+ system("rm -rf html");
+ system("$bjam");
+ chdir("../..");
+ mkdir("doc");
+ system("cp -vR src/doc/html/* doc");
+}
+
+sub build_example_diffs
+{
+ my @cpp11_files = `find src/examples/cpp11 -type f -name "*.*pp"`;
+ foreach my $cpp11_file (@cpp11_files)
+ {
+ chomp($cpp11_file);
+
+ my $cpp03_file = $cpp11_file;
+ $cpp03_file =~ s/\/cpp11\//\/cpp03\//;
+ my $output_diff = $cpp11_file;
+ $output_diff =~ s/src\/examples\/cpp11\///g;
+ my ($output_diff_name, $output_dir) = fileparse($output_diff);
+ my $output_html = $output_diff . ".html";
+
+ mkpath("doc/examples/diffs/$output_dir");
+ system("diff -U1000000 $cpp03_file $cpp11_file > doc/examples/diffs/$output_diff");
+ system("cd doc/examples/diffs && diff2html.py -i $output_diff -o $output_html");
+ unlink("doc/examples/diffs/$output_diff");
+ }
+}
+
+sub make_asio_packages
+{
+ our $asio_name;
+ system("./autogen.sh");
+ system("./configure");
+ system("make dist");
+ system("tar tfz $asio_name.tar.gz | sed -e 's/^[^\\/]*//' | sort -df > asio.manifest");
+}
+
+sub build_boost_asio_doc
+{
+ my $cwd = getcwd();
+ my $bjam = abs_path(glob("../boost/bjam"));
+ chdir("../boost/doc");
+ system("$bjam clean");
+ system("rm -rf html/boost_asio");
+ system("$bjam asio");
+ chdir($cwd);
+}
+
+our $boost_asio_readme = <<"EOF";
+Copy the `boost', `doc' and `libs' directories into an existing boost 1.33.0,
+1.33.1, 1.34, 1.34.1, 1.35 or 1.36 distribution.
+
+Before using Boost.Asio, the Boost.System library needs to be built. This can
+be done by running bjam in the libs/system/build directory. Consult the Boost
+Getting Started page (http://www.boost.org/more/getting_started.html) for more
+information on how to build the Boost libraries.
+EOF
+
+our $boost_system_jamfile = <<"EOF";
+# Boost System Library Build Jamfile
+
+# (C) Copyright Beman Dawes 2002, 2006
+
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt)
+
+# See library home page at http://www.boost.org/libs/system
+
+subproject libs/system/build ;
+
+SOURCES = error_code ;
+
+lib boost_system
+ : ../src/$(SOURCES).cpp
+ : # build requirements
+ <define>BOOST_SYSTEM_STATIC_LINK
+ <sysinclude>$(BOOST_AUX_ROOT) <sysinclude>$(BOOST_ROOT)
+ # common-variant-tag ensures that the library will
+ # be named according to the rules used by the install
+ # and auto-link features:
+ common-variant-tag
+ : debug release # build variants
+ ;
+
+dll boost_system
+ : ../src/$(SOURCES).cpp
+ : # build requirements
+ <define>BOOST_SYSTEM_DYN_LINK=1 # tell source we're building dll's
+ <runtime-link>dynamic # build only for dynamic runtimes
+ <sysinclude>$(BOOST_AUX_ROOT) <sysinclude>$(BOOST_ROOT)
+ # common-variant-tag ensures that the library will
+ # be named according to the rules used by the install
+ # and auto-link features:
+ common-variant-tag
+ : debug release # build variants
+ ;
+
+install system lib
+ : <lib>boost_system <dll>boost_system
+ ;
+
+stage stage/lib : <lib>boost_system <dll>boost_system
+ :
+ # copy to a path rooted at BOOST_ROOT:
+ <locate>$(BOOST_ROOT)
+ # make sure the names of the libraries are correctly named:
+ common-variant-tag
+ # add this target to the "stage" and "all" psuedo-targets:
+ <target>stage
+ <target>all
+ :
+ debug release
+ ;
+
+# end
+EOF
+
+sub create_boost_asio_content
+{
+ # Create directory structure.
+ system("rm -rf $boost_asio_name");
+ mkdir("$boost_asio_name");
+ mkdir("$boost_asio_name/doc");
+ mkdir("$boost_asio_name/doc/html");
+ mkdir("$boost_asio_name/boost");
+ mkdir("$boost_asio_name/boost/config");
+ mkdir("$boost_asio_name/libs");
+
+ # Copy files.
+ system("cp -vLR ../boost/doc/html/boost_asio.html $boost_asio_name/doc/html");
+ system("cp -vLR ../boost/doc/html/boost_asio $boost_asio_name/doc/html");
+ system("cp -vLR ../boost/boost/asio.hpp $boost_asio_name/boost");
+ system("cp -vLR ../boost/boost/asio $boost_asio_name/boost");
+ system("cp -vLR ../boost/boost/cerrno.hpp $boost_asio_name/boost");
+ system("cp -vLR ../boost/boost/config/warning_disable.hpp $boost_asio_name/boost/config");
+ system("cp -vLR ../boost/boost/system $boost_asio_name/boost");
+ system("cp -vLR ../boost/libs/asio $boost_asio_name/libs");
+ system("cp -vLR ../boost/libs/system $boost_asio_name/libs");
+
+ # Remove modular boost include directories.
+ system("rm -rf $boost_asio_name/libs/asio/include");
+ system("rm -rf $boost_asio_name/libs/system/include");
+
+ # Add dummy definitions of BOOST_SYMBOL* to boost/system/config.hpp.
+ my $from = "$boost_asio_name/boost/system/config.hpp";
+ my $to = "$boost_asio_name/boost/system/config.hpp.new";
+ open(my $input, "<$from") or die("Can't open $from for reading");
+ open(my $output, ">$to") or die("Can't open $to for writing");
+ while (my $line = <$input>)
+ {
+ print($output $line);
+ if ($line =~ /<boost\/config\.hpp>/)
+ {
+ print($output "\n// These #defines added by the separate Boost.Asio package.\n");
+ print($output "#if !defined(BOOST_SYMBOL_IMPORT)\n");
+ print($output "# if defined(BOOST_HAS_DECLSPEC)\n");
+ print($output "# define BOOST_SYMBOL_IMPORT __declspec(dllimport)\n");
+ print($output "# else // defined(BOOST_HAS_DECLSPEC)\n");
+ print($output "# define BOOST_SYMBOL_IMPORT\n");
+ print($output "# endif // defined(BOOST_HAS_DECLSPEC)\n");
+ print($output "#endif // !defined(BOOST_SYMBOL_IMPORT)\n");
+ print($output "#if !defined(BOOST_SYMBOL_EXPORT)\n");
+ print($output "# if defined(BOOST_HAS_DECLSPEC)\n");
+ print($output "# define BOOST_SYMBOL_EXPORT __declspec(dllexport)\n");
+ print($output "# else // defined(BOOST_HAS_DECLSPEC)\n");
+ print($output "# define BOOST_SYMBOL_EXPORT\n");
+ print($output "# endif // defined(BOOST_HAS_DECLSPEC)\n");
+ print($output "#endif // !defined(BOOST_SYMBOL_EXPORT)\n");
+ print($output "#if !defined(BOOST_SYMBOL_VISIBLE)\n");
+ print($output "# define BOOST_SYMBOL_VISIBLE\n");
+ print($output "#endif // !defined(BOOST_SYMBOL_VISIBLE)\n\n");
+ }
+ }
+ close($input);
+ close($output);
+ system("mv $to $from");
+
+ # Create readme.
+ $to = "$boost_asio_name/README.txt";
+ open($output, ">$to") or die("Can't open $to for writing");
+ print($output $boost_asio_readme);
+ close($output);
+
+ # Create Boost.System Jamfile.
+ $to = "$boost_asio_name/libs/system/build/Jamfile";
+ open($output, ">$to") or die("Can't open $to for writing");
+ print($output $boost_system_jamfile);
+ close($output);
+
+ # Remove SVN and git files.
+ system("find $boost_asio_name -name .svn -exec rm -rf {} \\;");
+ system("find $boost_asio_name -name .git -exec rm -rf {} \\;");
+ system("find $boost_asio_name -name .gitignore -exec rm -rf {} \\;");
+ system("find $boost_asio_name -name .gitattributes -exec rm -rf {} \\;");
+}
+
+sub make_boost_asio_packages
+{
+ our $boost_asio_name;
+ system("tar --format=ustar -chf - $boost_asio_name | gzip -c >$boost_asio_name.tar.gz");
+ system("tar --format=ustar -chf - $boost_asio_name | bzip2 -9 -c >$boost_asio_name.tar.bz2");
+ system("rm -f $boost_asio_name.zip");
+ system("zip -rq $boost_asio_name.zip $boost_asio_name");
+ system("rm -rf $boost_asio_name");
+ system("tar tfz $boost_asio_name.tar.gz | sed -e 's/^[^\\/]*//' | sort -df > boost_asio.manifest");
+}
+
+(scalar(@ARGV) == 1) or print_usage_and_exit();
+my $new_version = 1;
+my $package_asio = 1;
+my $package_boost = 1;
+if ($ARGV[0] eq "--package-asio")
+{
+ $new_version = 0;
+ $package_boost = 0;
+}
+
+if ($new_version)
+{
+ determine_version($ARGV[0]);
+ update_configure_ac();
+ update_readme();
+ update_asio_version_hpp();
+ update_boost_asio_version_hpp();
+}
+else
+{
+ determine_version_from_configure();
+}
+
+if ($package_asio)
+{
+ build_asio_doc();
+ build_example_diffs();
+ make_asio_packages();
+}
+
+if ($package_boost)
+{
+ build_boost_asio_doc();
+ create_boost_asio_content();
+ make_boost_asio_packages();
+}