diff --git a/Configure.PL b/Configure.PL
--- a/Configure.PL
+++ b/Configure.PL
@@ -6,12 +6,22 @@
 use Config;
 use ExtUtils::Embed;
 
+sub tidy {
+    my $str = shift;
+    # If compiling for multiple archs, compile for none.
+    if ($str =~ /-arch \S+ +.*-arch \S+/) {
+        $str =~ s/-arch \S+//g;
+    }
+    return $str;
+}
+
 my $embed_flags = "-I" . cwd();
 my $ccdlflags = "";
-my $flags = "$Config{ccflags} $Config{ccdlflags} ";
+my $flags = tidy("$Config{ccflags} $Config{ccdlflags} ");
 
 if ($flags =~ /\S/) {
     $flags =~ s{([\\"'])}{\\$1}g;
+
     my @flags = grep { length $_ } split /\s+/, $flags;
 
     if ($^O eq 'MSWin32') {
@@ -39,7 +49,7 @@
 
             $flags = "$Config{ccflags} $Config{ccdlflags}";
             $flags =~ s{([\\"'])}{\\$1}g;
-            @flags = grep { length $_ } split /\s+/, $flags;
+            @flags = grep { length $_ } split /\s+/, tidy($flags);
         }
         else {
             warn "Unrecognized libperl shared library: $Config{libperl}, proceeding anyway...\n";
@@ -49,12 +59,12 @@
         $embed_flags .= " -optc-Ddirent=DIRENT";
     }
     else {
-        $embed_flags .= " -optc$_" for grep length, split(/\s+/, ccopts());
-        $embed_flags .= " -optl$_" for grep length, split(/\s+/, ldopts());
+        $embed_flags .= " -optc$_" for grep length, split(/\s+/, tidy(ccopts()));
+        $embed_flags .= " -optl$_" for grep length, split(/\s+/, tidy(ldopts()));
     }
 
-    $embed_flags .= " $_" for grep { /-[DIL]/ } split(/\s+/, ccopts());
-    $embed_flags .= " $_" for grep { /-[DIL]/ } split(/\s+/, ldopts());
+    $embed_flags .= " $_" for grep { /-[DIL]/ } split(/\s+/, tidy(ccopts()));
+    $embed_flags .= " $_" for grep { /-[DIL]/ } split(/\s+/, tidy(ldopts()));
 
     if ($Config{osname} eq 'cygwin') {
         my $cygpath = sub {
diff --git a/HsPerl5.cabal b/HsPerl5.cabal
--- a/HsPerl5.cabal
+++ b/HsPerl5.cabal
@@ -1,6 +1,6 @@
 name:               HsPerl5
-version:            0.0.6
-copyright:          2008 Audrey Tang
+version:            0.0.6.20150815
+copyright:          2008-2015 Audrey Tang
 license:            BSD3
 license-file:       LICENSE
 author:             Audrey Tang <audreyt@audreyt.org>
@@ -27,7 +27,7 @@
                     ScopedTypeVariables, FlexibleInstances,
                     UndecidableInstances, OverlappingInstances, IncoherentInstances
 exposed-modules:    Language.Perl5
-build-depends:      base
+build-depends:      base >= 4 && < 5
 extra-source-files: README test.hs Configure.PL p5embed.h perlxsi.c
 hs-source-dirs:     src
 category:           Language, Pugs
diff --git a/perlxsi.c b/perlxsi.c
--- a/perlxsi.c
+++ b/perlxsi.c
@@ -1,5 +1,6 @@
-#include <EXTERN.h>
-#include <perl.h>
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
 
 EXTERN_C void xs_init (pTHX);
 
@@ -8,9 +9,10 @@
 EXTERN_C void
 xs_init(pTHX)
 {
-	char *file = __FILE__;
-	dXSUB_SYS;
+    static const char file[] = __FILE__;
+    dXSUB_SYS;
+    PERL_UNUSED_CONTEXT;
 
-	/* DynaLoader is a special case */
-	newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
+    /* DynaLoader is a special case */
+    newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
 }
diff --git a/src/Language/Perl5.hs b/src/Language/Perl5.hs
--- a/src/Language/Perl5.hs
+++ b/src/Language/Perl5.hs
@@ -1,4 +1,3 @@
-{-# INCLUDE "p5embed.h" #-}
 module Language.Perl5
     ( Context(..)
     , ToSV(..)
@@ -101,7 +100,7 @@
     svs <- peekArray0 nullPtr rv
     case svs of
         []      -> fromArgs =<< peekArray0 nullPtr (rv `advancePtr` 1)
-        [err]   -> throwIO (DynException $ toDyn err)
+        [err]   -> throwIO (toException $ toDyn err)
         (_:x:_) -> fail =<< fromSV x
 
 -- | Data types that can be casted into a Perl 5 value (SV).
