support osx and linux on travis
diff --git a/.travis.yml b/.travis.yml
index 0a8771e..c784619 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,26 +1,21 @@
-language: python
-python: 2.7
+language: c
+os:
+    - linux
+    - osx
+compiler:
+    - clang
+    - gcc
 env:
     - TOX_ENV=py26
     - TOX_ENV=py27
     - TOX_ENV=py32
     - TOX_ENV=py33
     - TOX_ENV=pypy
-    - TOX_ENV=py26 CC=clang
-    - TOX_ENV=py27 CC=clang
-    - TOX_ENV=py32 CC=clang
-    - TOX_ENV=py33 CC=clang
-    - TOX_ENV=pypy CC=clang
     - TOX_ENV=py26 OPENSSL=0.9.8
     - TOX_ENV=py27 OPENSSL=0.9.8
     - TOX_ENV=py32 OPENSSL=0.9.8
     - TOX_ENV=py33 OPENSSL=0.9.8
     - TOX_ENV=pypy OPENSSL=0.9.8
-    - TOX_ENV=py26 CC=clang OPENSSL=0.9.8
-    - TOX_ENV=py27 CC=clang OPENSSL=0.9.8
-    - TOX_ENV=py32 CC=clang OPENSSL=0.9.8
-    - TOX_ENV=py33 CC=clang OPENSSL=0.9.8
-    - TOX_ENV=pypy CC=clang OPENSSL=0.9.8
     - TOX_ENV=docs
     - TOX_ENV=pep8
     - TOX_ENV=py3pep8
@@ -29,7 +24,7 @@
     - ./.travis/install.sh
 
 script:
-    - tox -e $TOX_ENV
+    - if [[ "$(uname -s)" == "Darwin" ]]; then eval "$(pyenv init -)";fi && source ~/.venv/bin/activate && tox -e $TOX_ENV
 
 after_success:
     - coveralls
@@ -40,3 +35,78 @@
             - "irc.freenode.org#cryptography-dev"
         use_notice: true
         skip_join: true
+
+matrix:
+    exclude:
+        - os: osx
+          env: TOX_ENV=py26
+          compiler: gcc
+        - os: osx
+          env: TOX_ENV=py27
+          compiler: gcc
+        - os: osx
+          env: TOX_ENV=py32
+          compiler: gcc
+        - os: osx
+          env: TOX_ENV=py33
+          compiler: gcc
+        - os: osx
+          env: TOX_ENV=pypy
+          compiler: gcc
+        - os: osx
+          env: TOX_ENV=py26
+          compiler: clang
+        - os: osx
+          env: TOX_ENV=py27
+          compiler: clang
+        - os: osx
+          env: TOX_ENV=py32
+          compiler: clang
+        - os: osx
+          env: TOX_ENV=py33
+          compiler: clang
+        - os: osx
+          env: TOX_ENV=pypy
+          compiler: clang
+        - os: osx
+          env: TOX_ENV=py26 OPENSSL=0.9.8
+          compiler: gcc
+        - os: osx
+          env: TOX_ENV=py27 OPENSSL=0.9.8
+          compiler: gcc
+        - os: osx
+          env: TOX_ENV=py32 OPENSSL=0.9.8
+          compiler: gcc
+        - os: osx
+          env: TOX_ENV=py33 OPENSSL=0.9.8
+          compiler: gcc
+        - os: osx
+          env: TOX_ENV=pypy OPENSSL=0.9.8
+          compiler: gcc
+        - os: osx
+          env: TOX_ENV=docs
+          compiler: gcc
+        - os: osx
+          env: TOX_ENV=pep8
+          compiler: gcc
+        - os: osx
+          env: TOX_ENV=py3pep8
+          compiler: gcc
+        - os: osx
+          env: TOX_ENV=docs
+          compiler: clang
+        - os: osx
+          env: TOX_ENV=pep8
+          compiler: clang
+        - os: osx
+          env: TOX_ENV=py3pep8
+          compiler: clang
+        - os: linux
+          env: TOX_ENV=docs
+          compiler: clang
+        - os: linux
+          env: TOX_ENV=pep8
+          compiler: clang
+        - os: linux
+          env: TOX_ENV=py3pep8
+          compiler: clang
diff --git a/.travis/install.sh b/.travis/install.sh
index 4aa3979..d25ed94 100755
--- a/.travis/install.sh
+++ b/.travis/install.sh
@@ -3,10 +3,75 @@
 set -e
 set -x
 
-if [[ "${OPENSSL}" == "0.9.8" ]]; then
+if [[ "${OPENSSL}" == "0.9.8" && "$(uname -s)" != "Darwin" ]]; then
     sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu/ lucid main"
     sudo apt-get -y update
     sudo apt-get install -y --force-yes libssl-dev/lucid
 fi
 
+if [[ "$(uname -s)" == "Darwin" ]]; then
+    brew update
+    brew install pyenv
+    if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
+    case "${TOX_ENV}" in
+        py26)
+            sudo easy_install pip
+            sudo pip install setuptools --no-use-wheel --upgrade
+            sudo pip install virtualenv
+            ;;
+        py27)
+            sudo easy_install pip
+            sudo pip install setuptools --no-use-wheel --upgrade
+            sudo pip install virtualenv
+            ;;
+        pypy)
+            pyenv install pypy-2.2.1
+            pyenv global pypy-2.2.1
+            pip install virtualenv
+            ;;
+        py32)
+            pyenv install 3.2.5
+            pyenv global 3.2.5
+            pip install virtualenv
+            ;;
+        py33)
+            pyenv install 3.3.2
+            pyenv global 3.3.2
+            pip install virtualenv
+            ;;
+    esac
+    pyenv rehash
+else
+    # add mega-python ppa
+    sudo add-apt-repository -y ppa:fkrull/deadsnakes
+    sudo apt-get -y update
+
+    case "${TOX_ENV}" in
+        py26)
+            sudo apt-get install python2.6 python2.6-dev
+            ;;
+        py32)
+            sudo apt-get install python3.2 python3.2-dev
+            ;;
+        py33)
+            sudo apt-get install python3.3 python3.3-dev
+            ;;
+        py3pep8)
+            sudo apt-get install python3.3 python3.3-dev
+            ;;
+        pypy)
+            sudo add-apt-repository -y ppa:pypy/ppa
+            sudo apt-get -y update
+            sudo apt-get install -y --force-yes pypy pypy-dev
+            ;;
+    esac
+    sudo pip install virtualenv
+fi
+
+virtualenv ~/.venv
+source ~/.venv/bin/activate
 pip install tox coveralls
+
+if [[ "$(uname -s)" == "Darwin" ]]; then
+    pyenv rehash
+fi