Switch Eigen Bazel to a separate file

Change-Id: I547037460e8ec1fa14438d655c10b261daa39d96
diff --git a/BUILD b/BUILD
index 3a0d3d6..650ce10 100644
--- a/BUILD
+++ b/BUILD
@@ -1,5 +1,5 @@
 # Ceres Solver - A fast non-linear least squares minimizer
-# Copyright 2017 Google Inc. All rights reserved.
+# Copyright 2018 Google Inc. All rights reserved.
 # http://ceres-solver.org/
 #
 # Redistribution and use in source and binary forms, with or without
@@ -346,7 +346,7 @@
     name = test_name + '_test',
     srcs = ['internal/ceres/' + test_name + '_test.cc'],
     copts = [
-        '-Wno-sign-compare'
+        '-Wno-sign-compare',
 
         # These two warnings don't work well in conjunction with GMock, and
         # trigger incorrectly on parts of rotation_test. For now, disable them,
diff --git a/WORKSPACE b/WORKSPACE
index 97087b8..afc7840 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -1,5 +1,5 @@
 # Ceres Solver - A fast non-linear least squares minimizer
-# Copyright 2017 Google Inc. All rights reserved.
+# Copyright 2018 Google Inc. All rights reserved.
 # http://ceres-solver.org/
 #
 # Redistribution and use in source and binary forms, with or without
@@ -53,9 +53,7 @@
     ],
 )
 
-# External dependency: Eigen; has no Bazel build, so make a hacky one.
-# TODO(keir): Replace this with a better version, like from TensorFlow.
-# See https://github.com/ceres-solver/ceres-solver/issues/337.
+# External dependency: Eigen; has no Bazel build.
 new_http_archive(
     name   = 'com_github_eigen_eigen',
     sha256 = "dd254beb0bafc695d0f62ae1a222ff85b52dbaa3a16f76e781dce22d0d20a4a6",
@@ -63,14 +61,6 @@
     urls = [
         "http://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2"
     ],
-    build_file_content = '''
-cc_library(
-    name = 'eigen',
-    srcs = [],
-    includes = ['.'],
-    hdrs = glob(['Eigen/**']),
-    visibility = ['//visibility:public'],
-)
-'''
+    build_file = 'bazel/eigen.BUILD'
 )
 
diff --git a/bazel/eigen.BUILD b/bazel/eigen.BUILD
new file mode 100644
index 0000000..cf6391a
--- /dev/null
+++ b/bazel/eigen.BUILD
@@ -0,0 +1,39 @@
+# Ceres Solver - A fast non-linear least squares minimizer
+# Copyright 2018 Google Inc. All rights reserved.
+# http://ceres-solver.org/
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+# * Neither the name of Google Inc. nor the names of its contributors may be
+#   used to endorse or promote products derived from this software without
+#   specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: mierle@gmail.com (Keir Mierle)
+
+# TODO(keir): Replace this with a better version, like from TensorFlow.
+# See https://github.com/ceres-solver/ceres-solver/issues/337.
+cc_library(
+    name = 'eigen',
+    srcs = [],
+    includes = ['.'],
+    hdrs = glob(['Eigen/**']),
+    visibility = ['//visibility:public'],
+)