diff options
Diffstat (limited to '3rdparty/asio/release.pl')
-rw-r--r-- | 3rdparty/asio/release.pl | 439 |
1 files changed, 439 insertions, 0 deletions
diff --git a/3rdparty/asio/release.pl b/3rdparty/asio/release.pl new file mode 100644 index 00000000000..332760c8d8f --- /dev/null +++ b/3rdparty/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(); +} |