diff --git a/third_party/libopenjpeg20/CMakeLists.txt b/third_party/libopenjpeg20/CMakeLists.txt
deleted file mode 100644
index 800dc9a..0000000
--- a/third_party/libopenjpeg20/CMakeLists.txt
+++ /dev/null
@@ -1,111 +0,0 @@
-include_regular_expression("^.*$")
-
-#
-install( FILES  ${CMAKE_CURRENT_BINARY_DIR}/opj_config.h
- DESTINATION ${OPENJPEG_INSTALL_INCLUDE_DIR} COMPONENT Headers)
-
-include_directories(
-  ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h and opj_config_private.h
-)
-# Defines the source code for the library
-set(OPENJPEG_SRCS
-  ${CMAKE_CURRENT_SOURCE_DIR}/bio.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/cio.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/dwt.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/event.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/function_list.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/image.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/invert.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/j2k.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/jp2.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/mct.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/mqc.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/openjpeg.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/opj_clock.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/pi.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/raw.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/sparse_array.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/t1.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/t2.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/tcd.c
-  ${CMAKE_CURRENT_SOURCE_DIR}/tgt.c
-)
-if(BUILD_JPIP)
-  add_definitions(-DUSE_JPIP)
-  set(OPENJPEG_SRCS
-    ${OPENJPEG_SRCS}
-    ${CMAKE_CURRENT_SOURCE_DIR}/cidx_manager.c
-    ${CMAKE_CURRENT_SOURCE_DIR}/phix_manager.c
-    ${CMAKE_CURRENT_SOURCE_DIR}/ppix_manager.c
-    ${CMAKE_CURRENT_SOURCE_DIR}/thix_manager.c
-    ${CMAKE_CURRENT_SOURCE_DIR}/tpix_manager.c
-  )
-endif()
-
-# Build the library
-if(WIN32)
-  if(BUILD_SHARED_LIBS)
-    add_definitions(-DOPJ_EXPORTS)
-  else()
-    add_definitions(-DOPJ_STATIC)
-  endif()
-endif()
-add_library(${OPENJPEG_LIBRARY_NAME} ${OPENJPEG_SRCS})
-if(UNIX)
-  target_link_libraries(${OPENJPEG_LIBRARY_NAME} m)
-endif()
-set_target_properties(${OPENJPEG_LIBRARY_NAME} PROPERTIES ${OPENJPEG_LIBRARY_PROPERTIES})
-
-# Install library
-install(TARGETS ${OPENJPEG_LIBRARY_NAME}
-  EXPORT OpenJPEGTargets
-  RUNTIME DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
-  LIBRARY DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
-  ARCHIVE DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
-)
-
-# Install includes files
-install(FILES openjpeg.h opj_stdint.h
-  DESTINATION ${OPENJPEG_INSTALL_INCLUDE_DIR} COMPONENT Headers
-)
-
-if(BUILD_DOC)
-# install man page of the library
-install(
-  FILES       ${OPENJPEG_SOURCE_DIR}/doc/man/man3/libopenjp2.3
-  DESTINATION ${OPENJPEG_INSTALL_MAN_DIR}/man3)
-endif()
-
-# internal utilities to generate t1_luts.h (part of the jp2 lib)
-# no need to install:
-add_executable(t1_generate_luts t1_generate_luts.c)
-if(UNIX)
-  target_link_libraries(t1_generate_luts m)
-endif()
-
-# Experimental option; let's how cppcheck performs
-# Implementation details:
-# I could not figure out how to easily upload a file to CDash. Instead simply
-# pretend cppcheck is part of the Build step. Technically cppcheck can even
-# output gcc formatted error/warning report
-# Another implementation detail: I could not redirect error to the error
-# catching mechanism something is busted in cmake 2.8.5, I had to use the
-# warning regex to catch them.
-if(OPENJPEG_CPPCHECK)
-  find_package(CPPCHECK REQUIRED)
-  foreach(f ${OPENJPEG_SRCS})
-    # cppcheck complains about too many configuration, pretend to be WIN32:
-    add_custom_command(TARGET ${OPENJPEG_LIBRARY_NAME}
-      COMMAND ${CPPCHECK_EXECUTABLE} -DWIN32 ${f})
-  endforeach()
-endif()
-
-if(OPJ_USE_DSYMUTIL)
-  if(BUILD_SHARED_LIBS)
-    GET_TARGET_PROPERTY(OPENJPEG_LIBRARY_LOCATION ${OPENJPEG_LIBRARY_NAME} LOCATION)
-    add_custom_command(TARGET ${OPENJPEG_LIBRARY_NAME} POST_BUILD
-    COMMAND "dsymutil" "${OPENJPEG_LIBRARY_LOCATION}"
-    COMMENT "dsymutil ${OPENJPEG_LIBRARY_LOCATION}"
-    DEPENDS ${OPENJPEG_LIBRARY_NAME})
-  endif()
-endif()
diff --git a/third_party/libopenjpeg20/indexbox_manager.h b/third_party/libopenjpeg20/indexbox_manager.h
deleted file mode 100644
index 238114b..0000000
--- a/third_party/libopenjpeg20/indexbox_manager.h
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * $Id: indexbox_manager.h 897 2011-08-28 21:43:57Z Kaori.Hagihara@gmail.com $
- *
- * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2004, Yannick Verschueren
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * 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.
- */
-
-/*! \file
- *  \brief Modification of jpip.c from 2KAN indexer
- */
-
-#ifndef  INDEXBOX_MANAGER_H_
-# define INDEXBOX_MANAGER_H_
-
-#include "openjpeg.h"
-#include "j2k.h" /* needed to use jp2.h */
-#include "jp2.h"
-
-#define JPIP_CIDX 0x63696478   /* Codestream index                */
-#define JPIP_CPTR 0x63707472   /* Codestream Finder Box           */
-#define JPIP_MANF 0x6d616e66   /* Manifest Box                    */
-#define JPIP_FAIX 0x66616978   /* Fragment array Index box        */
-#define JPIP_MHIX 0x6d686978   /* Main Header Index Table         */
-#define JPIP_TPIX 0x74706978   /* Tile-part Index Table box       */
-#define JPIP_THIX 0x74686978   /* Tile header Index Table box     */
-#define JPIP_PPIX 0x70706978   /* Precinct Packet Index Table box */
-#define JPIP_PHIX 0x70686978   /* Packet Header index Table       */
-#define JPIP_FIDX 0x66696478   /* File Index                      */
-#define JPIP_FPTR 0x66707472   /* File Finder                     */
-#define JPIP_PRXY 0x70727879   /* Proxy boxes                     */
-#define JPIP_IPTR 0x69707472   /* Index finder box                */
-#define JPIP_PHLD 0x70686c64   /* Place holder                    */
-
-
-/*
- * Write tile-part Index table box (superbox)
- *
- * @param[in] coff      offset of j2k codestream
- * @param[in] cstr_info codestream information
- * @param[in] j2klen    length of j2k codestream
- * @param[in] cio       file output handle
- * @return              length of tpix box
- */
-int opj_write_tpix(int coff, opj_codestream_info_t cstr_info, int j2klen,
-                   opj_stream_private_t *cio,
-                   opj_event_mgr_t * p_manager);
-
-
-/*
- * Write tile header index table box (superbox)
- *
- * @param[in] coff      offset of j2k codestream
- * @param[in] cstr_info codestream information pointer
- * @param[in] cio       file output handle
- * @return              length of thix box
- */
-int opj_write_thix(int coff, opj_codestream_info_t cstr_info,
-                   opj_stream_private_t *cio, opj_event_mgr_t * p_manager);
-
-
-/*
- * Write precinct packet index table box (superbox)
- *
- * @param[in] coff      offset of j2k codestream
- * @param[in] cstr_info codestream information
- * @param[in] EPHused   true if EPH option used
- * @param[in] j2klen    length of j2k codestream
- * @param[in] cio       file output handle
- * @return              length of ppix box
- */
-int opj_write_ppix(int coff, opj_codestream_info_t cstr_info, OPJ_BOOL EPHused,
-                   int j2klen, opj_stream_private_t *cio,
-                   opj_event_mgr_t * p_manager);
-
-
-/*
- * Write packet header index table box (superbox)
- *
- * @param[in] coff      offset of j2k codestream
- * @param[in] cstr_info codestream information
- * @param[in] EPHused   true if EPH option used
- * @param[in] j2klen    length of j2k codestream
- * @param[in] cio       file output handle
- * @return              length of ppix box
- */
-int opj_write_phix(int coff, opj_codestream_info_t cstr_info, OPJ_BOOL EPHused,
-                   int j2klen, opj_stream_private_t *cio,
-                   opj_event_mgr_t * p_manager);
-
-/*
- * Write manifest box (box)
- *
- * @param[in] second number to be visited
- * @param[in] v      number of boxes
- * @param[in] box    box to be manifested
- * @param[in] cio    file output handle
- */
-
-void opj_write_manf(int second,
-                    int v,
-                    opj_jp2_box_t *box,
-                    opj_stream_private_t *cio,
-                    opj_event_mgr_t * p_manager);
-
-/*
- * Write main header index table (box)
- *
- * @param[in] coff offset of j2k codestream
- * @param[in] cstr_info codestream information
- * @param[in] cio  file output handle
- * @return         length of mainmhix box
- */
-int opj_write_mainmhix(int coff, opj_codestream_info_t cstr_info,
-                       opj_stream_private_t *cio,
-                       opj_event_mgr_t * p_manager);
-
-int opj_write_phixfaix(int coff, int compno, opj_codestream_info_t cstr_info,
-                       OPJ_BOOL EPHused, int j2klen, opj_stream_private_t *cio,
-                       opj_event_mgr_t * p_manager);
-
-int opj_write_ppixfaix(int coff, int compno, opj_codestream_info_t cstr_info,
-                       OPJ_BOOL EPHused, int j2klen, opj_stream_private_t *cio,
-                       opj_event_mgr_t * p_manager);
-
-int opj_write_tilemhix(int coff, opj_codestream_info_t cstr_info, int tileno,
-                       opj_stream_private_t *cio,
-                       opj_event_mgr_t * p_manager);
-
-int opj_write_tpixfaix(int coff, int compno, opj_codestream_info_t cstr_info,
-                       int j2klen, opj_stream_private_t *cio,
-                       opj_event_mgr_t * p_manager);
-
-#endif      /* !INDEXBOX_MANAGER_H_ */
diff --git a/third_party/libopenjpeg20/opj_config.h.cmake.in b/third_party/libopenjpeg20/opj_config.h.cmake.in
deleted file mode 100644
index 5f762ca..0000000
--- a/third_party/libopenjpeg20/opj_config.h.cmake.in
+++ /dev/null
@@ -1,10 +0,0 @@
-/* create opj_config.h for CMake */
-#cmakedefine OPJ_HAVE_STDINT_H 		@OPJ_HAVE_STDINT_H@
-
-/*--------------------------------------------------------------------------*/
-/* OpenJPEG Versioning                                                      */
-
-/* Version number. */
-#define OPJ_VERSION_MAJOR @OPENJPEG_VERSION_MAJOR@
-#define OPJ_VERSION_MINOR @OPENJPEG_VERSION_MINOR@
-#define OPJ_VERSION_BUILD @OPENJPEG_VERSION_BUILD@
