# ChangeLog for profile directory
# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
# $Header: /var/cvsroot/gentoo-x86/profiles/default/bsd/fbsd/amd64/9.1/clang/ChangeLog,v 1.10 2013/07/27 23:27:39 aballier Exp $

  27 Jul 2013; Alexis Ballier <aballier@gentoo.org> package.use.force:
  build libcxx multilib, patch by Yuta SATOH in bug #475294

  19 Jun 2013; Alexis Ballier <aballier@gentoo.org> +make.defaults:
  add default cflags, esp. CXXFLAGS=-stdlib=libc++ ...

  19 Jun 2013; Alexis Ballier <aballier@gentoo.org> package.use.force,
  package.use.mask:
  force curl[ssl,curl_ssl_openssl] and mask the others: curl is in @system for
  this profile so better have it with sane defaults.

  19 Jun 2013; Alexis Ballier <aballier@gentoo.org> -package.unmask:
  no need to unmask clang 3.3 now that it is unmasked globally

  17 Jun 2013; Alexis Ballier <aballier@gentoo.org> +package.unmask:
  Unmask llvm/clang 3.3_rc since llvm 3.2 does not build with clang++
  -stdlib=libc++

  01 Jun 2013; Alexis Ballier <aballier@gentoo.org> package.use.force,
  package.use.mask:
  Build libcxxrt over libgcc_s since that is what clang defaults to.

  31 May 2013; Alexis Ballier <aballier@gentoo.org> package.use.mask:
  libunwind is rather core for our C++ stack. Better not have it link to
  liblzma for smaller debug info.

  31 May 2013; Alexis Ballier <aballier@gentoo.org> package.use.force:
  Force building libc++ over libcxxrt

  31 May 2013; Alexis Ballier <aballier@gentoo.org> +package.use.force:
  Force static libs on the C++ stack so that static linking has a chance to
  work

  30 May 2013; Alexis Ballier <aballier@gentoo.org> +package.use.mask:
  Mask binutils[cxx], bug #427344 (and add a ChangeLog here)

