<commit_before>require 'formula'
require Formula.path("python") # For TkCheck requirement

# Python3 is the new language standard, not just a new revision.
# It's somewhat incompatible with Python 2.x, therefore, the executable
# "python" will always point to the 2.x version which you can get by
# `brew install python`.

class Distribute < Formula
  url 'http://pypi.python.org/packages/source/d/distribute/distribute-0.6.32.tar.gz'
  sha1 '65ae88517ac47bd4e0fb449b3b9a9bf85e8366c8'
end

class Pip < Formula
  url 'http://pypi.python.org/packages/source/p/pip/pip-1.2.1.tar.gz'
  sha1 '35db84983ef3f66a8a161d320e61d192afc233d9'
end

class Python3 < Formula
  homepage 'http://www.python.org/'
  url 'http://python.org/ftp/python/3.3.0/Python-3.3.0.tar.bz2'
  sha1 '3e1464bc2c1dfa74287bc58da81168f50b0ae5c7'
  VER='3.3'  # The <major>.<minor> is used so often.

  depends_on TkCheck.new
  depends_on 'pkg-config' => :build
  depends_on 'readline' => :recommended
  depends_on 'sqlite' => :recommended
  depends_on 'gdbm' => :recommended
  depends_on 'openssl' if build.include? 'with-brewed-openssl'

  option :universal
  option 'quicktest', 'Run `make quicktest` after the build'
  option 'with-brewed-openssl', "Use Homebrew's openSSL instead of the one from OS X"

  def site_packages_cellar
    prefix/"Frameworks/Python.framework/Versions/#{VER}/lib/python#{VER}/site-packages"
  end

  # The HOMEBREW_PREFIX location of site-packages.
  def site_packages
    HOMEBREW_PREFIX/"lib/python#{VER}/site-packages"
  end

  # Where distribute/pip will install executable scripts.
  def scripts_folder
    HOMEBREW_PREFIX/"share/python3"
  end

  def effective_lib
    prefix/"Frameworks/Python.framework/Versions/#{VER}/lib"
  end

  def install
    # Unset these so that installing pip and distribute puts them where we want
    # and not into some other Python the user has installed.
    ENV['PYTHONPATH'] = nil
    ENV['PYTHONHOME'] = nil

    args = %W[
      --prefix=#{prefix}
      --enable-ipv6
      --datarootdir=#{share}
      --datadir=#{share}
      --enable-framework=#{prefix}/Frameworks]

    args << '--without-gcc' if ENV.compiler == :clang

    if build.universal?
      ENV.universal_binary
      args << "--enable-universalsdk" << "--with-universal-archs=intel"
    end

    distutils_fix_superenv(args)
    distutils_fix_stdenv

    # Python does not need all of X11, these bundled Headers are enough
    ENV.append 'CPPFLAGS', "-I#{MacOS.sdk_path}/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers" unless MacOS::CLT.installed?

    # Allow sqlite3 module to load extensions: http://docs.python.org/library/sqlite3.html#f1
    inreplace "setup.py", 'sqlite_defines.append(("SQLITE_OMIT_LOAD_EXTENSION", "1"))', 'pass'

    system "./configure", *args

    system "make"

    ENV.deparallelize # Installs must be serialized
    # Tell Python not to install into /Applications (default for framework builds)
    system "make", "install", "PYTHONAPPSDIR=#{prefix}"
    # Demos and Tools
    (HOMEBREW_PREFIX/'share/python3').mkpath
    system "make", "frameworkinstallextras", "PYTHONAPPSDIR=#{share}/python3"
    system "make", "quicktest" if build.include? "quicktest"

    # Any .app get a " 3" attached, so it does not conflict with python 2.x.
    Dir.glob(prefix/"*.app").each do |app|
      mv app, app.gsub(".app", " 3.app")
    end

    # Post-install, fix up the site-packages and install-scripts folders
    # so that user-installed Python software survives minor updates, such
    # as going from 3.3.0 to 3.3.1:

    # Remove the site-packages that Python created in its Cellar.
    site_packages_cellar.rmtree
    # Create a site-packages in HOMEBREW_PREFIX/lib/python#{VER}/site-packages
    site_packages.mkpath
    # Symlink the prefix site-packages into the cellar.
    ln_s site_packages, site_packages_cellar

    # Teach python not to use things from /System
    # and tell it about the correct site-package dir because we moved it
    sitecustomize = site_packages_cellar/"sitecustomize.py"
    rm sitecustomize if File.exist? sitecustomize
    sitecustomize.write(sitecustomize_content)

    # "python3" and executable is forgotten for framework builds.
    # Make sure homebrew symlinks it to HOMEBREW_PREFIX/bin.
    ln_s "#{bin}/python#{VER}", "#{bin}/python3" unless (bin/"python3").exist?

    # Install distribute for python3 and assure there's no name clash
    # with what the python (2.x) formula installs.
    scripts_folder.mkpath
    setup_args = ["-s", "setup.py", "install", "--force", "--verbose", "--install-lib=#{site_packages_cellar}", "--install-scripts=#{bin}" ]
    Distribute.new.brew { system "#{bin}/python#{VER}", *setup_args }
    mv bin/'easy_install', bin/'easy_install3'
    Pip.new.brew { system "#{bin}/python#{VER}", *setup_args }
    mv bin/'pip', bin/'pip3'

    # Tell distutils-based installers where to put scripts
    (prefix/"Frameworks/Python.framework/Versions/#{VER}/lib/python#{VER}/distutils/distutils.cfg").write <<-EOF.undent
      [install]
      install-scripts=#{scripts_folder}
      install-lib=#{site_packages}
    EOF

    unless MacOS::CLT.installed?
      makefile = prefix/"Frameworks/Python.framework/Versions/#{VER}/lib/python#{VER}/config-#{VER}m/Makefile"
      inreplace makefile do |s|
        s.gsub!(/^CC=.*$/, "CC=xcrun clang")
        s.gsub!(/^CXX=.*$/, "CXX=xcrun clang++")
        s.gsub!(/^AR=.*$/, "AR=xcrun ar")
        s.gsub!(/^RANLIB=.*$/, "RANLIB=xcrun ranlib")
      end
    end

    # A temporary fix, until a homebrew
    # [issue on handling Frameworks](https://github.com/mxcl/homebrew/issues/15943)
    # is resolved. `brew install python python3` failed to link because both
    # provide `Python.Framework`. Homebrew will need to be smarter about this,
    # since Frameworks are built to support multiple versions.
    ["Headers", "Python", "Resources"].each{ |f| rm(prefix/"Frameworks/Python.Framework/#{f}") }

  end

  def distutils_fix_superenv(args)
    if superenv?
      # To allow certain Python bindings to find brewed software:
      cflags = "CFLAGS=-I#{HOMEBREW_PREFIX}/include"
      ldflags = "LDFLAGS=-L#{HOMEBREW_PREFIX}/lib"<commit_msg>python3: Support Case sensitive file systems<commit_after>require 'formula'
require Formula.path("python") # For TkCheck requirement

# Python3 is the new language standard, not just a new revision.
# It's somewhat incompatible with Python 2.x, therefore, the executable
# "python" will always point to the 2.x version which you can get by
# `brew install python`.

class Distribute < Formula
  url 'http://pypi.python.org/packages/source/d/distribute/distribute-0.6.32.tar.gz'
  sha1 '65ae88517ac47bd4e0fb449b3b9a9bf85e8366c8'
end

class Pip < Formula
  url 'http://pypi.python.org/packages/source/p/pip/pip-1.2.1.tar.gz'
  sha1 '35db84983ef3f66a8a161d320e61d192afc233d9'
end

class Python3 < Formula
  homepage 'http://www.python.org/'
  url 'http://python.org/ftp/python/3.3.0/Python-3.3.0.tar.bz2'
  sha1 '3e1464bc2c1dfa74287bc58da81168f50b0ae5c7'
  VER='3.3'  # The <major>.<minor> is used so often.

  depends_on TkCheck.new
  depends_on 'pkg-config' => :build
  depends_on 'readline' => :recommended
  depends_on 'sqlite' => :recommended
  depends_on 'gdbm' => :recommended
  depends_on 'openssl' if build.include? 'with-brewed-openssl'

  option :universal
  option 'quicktest', 'Run `make quicktest` after the build'
  option 'with-brewed-openssl', "Use Homebrew's openSSL instead of the one from OS X"

  def site_packages_cellar
    prefix/"Frameworks/Python.framework/Versions/#{VER}/lib/python#{VER}/site-packages"
  end

  # The HOMEBREW_PREFIX location of site-packages.
  def site_packages
    HOMEBREW_PREFIX/"lib/python#{VER}/site-packages"
  end

  # Where distribute/pip will install executable scripts.
  def scripts_folder
    HOMEBREW_PREFIX/"share/python3"
  end

  def effective_lib
    prefix/"Frameworks/Python.framework/Versions/#{VER}/lib"
  end

  def install
    # Unset these so that installing pip and distribute puts them where we want
    # and not into some other Python the user has installed.
    ENV['PYTHONPATH'] = nil
    ENV['PYTHONHOME'] = nil

    args = %W[
      --prefix=#{prefix}
      --enable-ipv6
      --datarootdir=#{share}
      --datadir=#{share}
      --enable-framework=#{prefix}/Frameworks]

    args << '--without-gcc' if ENV.compiler == :clang

    if build.universal?
      ENV.universal_binary
      args << "--enable-universalsdk" << "--with-universal-archs=intel"
    end

    distutils_fix_superenv(args)
    distutils_fix_stdenv

    # Python does not need all of X11, these bundled Headers are enough
    ENV.append 'CPPFLAGS', "-I#{MacOS.sdk_path}/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers" unless MacOS::CLT.installed?

    # Allow sqlite3 module to load extensions: http://docs.python.org/library/sqlite3.html#f1
    inreplace "setup.py", 'sqlite_defines.append(("SQLITE_OMIT_LOAD_EXTENSION", "1"))', 'pass'

    system "./configure", *args

    system "make"

    ENV.deparallelize # Installs must be serialized
    # Tell Python not to install into /Applications (default for framework builds)
    system "make", "install", "PYTHONAPPSDIR=#{prefix}"
    # Demos and Tools
    (HOMEBREW_PREFIX/'share/python3').mkpath
    system "make", "frameworkinstallextras", "PYTHONAPPSDIR=#{share}/python3"
    system "make", "quicktest" if build.include? "quicktest"

    # Any .app get a " 3" attached, so it does not conflict with python 2.x.
    Dir.glob(prefix/"*.app").each do |app|
      mv app, app.gsub(".app", " 3.app")
    end

    # Post-install, fix up the site-packages and install-scripts folders
    # so that user-installed Python software survives minor updates, such
    # as going from 3.3.0 to 3.3.1:

    # Remove the site-packages that Python created in its Cellar.
    site_packages_cellar.rmtree
    # Create a site-packages in HOMEBREW_PREFIX/lib/python#{VER}/site-packages
    site_packages.mkpath
    # Symlink the prefix site-packages into the cellar.
    ln_s site_packages, site_packages_cellar

    # Teach python not to use things from /System
    # and tell it about the correct site-package dir because we moved it
    sitecustomize = site_packages_cellar/"sitecustomize.py"
    rm sitecustomize if File.exist? sitecustomize
    sitecustomize.write(sitecustomize_content)

    # "python3" and executable is forgotten for framework builds.
    # Make sure homebrew symlinks it to HOMEBREW_PREFIX/bin.
    ln_s "#{bin}/python#{VER}", "#{bin}/python3" unless (bin/"python3").exist?

    # Install distribute for python3 and assure there's no name clash
    # with what the python (2.x) formula installs.
    scripts_folder.mkpath
    setup_args = ["-s", "setup.py", "install", "--force", "--verbose", "--install-lib=#{site_packages_cellar}", "--install-scripts=#{bin}" ]
    Distribute.new.brew { system "#{bin}/python#{VER}", *setup_args }
    mv bin/'easy_install', bin/'easy_install3'
    Pip.new.brew { system "#{bin}/python#{VER}", *setup_args }
    mv bin/'pip', bin/'pip3'

    # Tell distutils-based installers where to put scripts
    (prefix/"Frameworks/Python.framework/Versions/#{VER}/lib/python#{VER}/distutils/distutils.cfg").write <<-EOF.undent
      [install]
      install-scripts=#{scripts_folder}
      install-lib=#{site_packages}
    EOF

    unless MacOS::CLT.installed?
      makefile = prefix/"Frameworks/Python.framework/Versions/#{VER}/lib/python#{VER}/config-#{VER}m/Makefile"
      inreplace makefile do |s|
        s.gsub!(/^CC=.*$/, "CC=xcrun clang")
        s.gsub!(/^CXX=.*$/, "CXX=xcrun clang++")
        s.gsub!(/^AR=.*$/, "AR=xcrun ar")
        s.gsub!(/^RANLIB=.*$/, "RANLIB=xcrun ranlib")
      end
    end

    # A temporary fix, until a homebrew
    # [issue on handling Frameworks](https://github.com/mxcl/homebrew/issues/15943)
    # is resolved. `brew install python python3` failed to link because both
    # provide `Python.framework`. Homebrew will need to be smarter about this,
    # since Frameworks are built to support multiple versions.
    ["Headers", "Python", "Resources"].each{ |f| rm(prefix/"Frameworks/Python.framework/#{f}") }

  end

  def distutils_fix_superenv(args)
    if superenv?
      # To allow certain Python bindings to find brewed software:
      cflags = "CFLAGS=-I#{HOMEBREW_PREFIX}/include"
      ldflags = "LDFLAGS=-L#{HOMEBREW_PREFIX}/lib"
{'fraction_non_alphanumeric': 0.1279697189337199, 'fraction_numerical': 0.021180639445920916, 'mean_word_length': 3.5992592592592594, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 15, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7359921', 'n_tokens_mistral': 4312, 'n_tokens_neox': 4073, 'n_words': 1038}