diff --git a/CMakeLists.txt b/CMakeLists.txt
index b8c3c05493caddfad14c76f6a5a0005a7e78b7a2..f96aa2217f115dd01afbfacd6301ed2b71b3a11d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -17,8 +17,10 @@ project(ADIOS2 VERSION 2.0.0)
 #------------------------------------------------------------------------------#
 # Some boilerplate to setup nice output directories
 #------------------------------------------------------------------------------#
-include(GNUInstallDirs)
-set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/adios2")
+set(CMAKE_INSTALL_BINDIR bin)
+set(CMAKE_INSTALL_LIBDIR lib)
+set(CMAKE_INSTALL_INCLUDEDIR include)
+set(CMAKE_INSTALL_CMAKEDIR lib/cmake/adios2)
 
 list(INSERT CMAKE_MODULE_PATH 0 "${ADIOS2_SOURCE_DIR}/cmake")
 if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt
index 1f06042875f41132e8b8fd7aeea92ba62fb454e2..8403e7306894667f7b63a93f844a4562d938d0d3 100644
--- a/bindings/python/CMakeLists.txt
+++ b/bindings/python/CMakeLists.txt
@@ -27,7 +27,8 @@ if(ADIOS2_HAVE_MPI)
   target_link_libraries(adios2py PRIVATE PythonModule::mpi4py)
 endif()
 
-string(REGEX REPLACE "^${PYTHON_PREFIX}/" ""
+string(REGEX REPLACE
+  "^${PYTHON_PREFIX}/[^/]*/python" "${CMAKE_INSTALL_LIBDIR}/python"
   CMAKE_INSTALL_PYTHONDIR "${PYTHON_SITE_PACKAGES}"
 )
 set(CMAKE_INSTALL_PYTHONDIR "${CMAKE_INSTALL_PYTHONDIR}"
diff --git a/cmake/ADIOS2ConfigCommon.cmake.in b/cmake/ADIOS2ConfigCommon.cmake.in
index 4e108bf2b80465fdf3c138744c84fa985b36df3b..945a97a9810c9c3c70364bf7d0ba8e218f4881cf 100644
--- a/cmake/ADIOS2ConfigCommon.cmake.in
+++ b/cmake/ADIOS2ConfigCommon.cmake.in
@@ -2,6 +2,11 @@ cmake_minimum_required(VERSION 3.5)
 
 include(CMakeFindDependencyMacro)
 
+set(ADIOS2_HAVE_MPI @ADIOS2_HAVE_MPI@)
+if(ADIOS2_HAVE_MPI)
+  find_dependency(MPI)
+endif()
+
 if(NOT @BUILD_SHARED_LIBS@)
   set(ADIOS2_HAVE_BZip2 @ADIOS2_HAVE_BZip2@)
   if(ADIOS2_HAVE_BZip2)
@@ -13,11 +18,6 @@ if(NOT @BUILD_SHARED_LIBS@)
     find_dependency(ZFP)
   endif()
 
-  set(ADIOS2_HAVE_MPI @ADIOS2_HAVE_MPI@)
-  if(ADIOS2_HAVE_MPI)
-    find_dependency(MPI)
-  endif()
-
   set(ADIOS2_HAVE_ZeroMQ @ADIOS2_HAVE_ZeroMQ@)
   if(ADIOS2_HAVE_ZeroMQ)
     find_dependency(ZeroMQ)
diff --git a/cmake/ADIOSFunctions.cmake b/cmake/ADIOSFunctions.cmake
index 14f070fe2ad00dace4fcbf0fc0fc800402121fdd..9fcc856cb066d5c46ab95d6156da634e49d92ae3 100644
--- a/cmake/ADIOSFunctions.cmake
+++ b/cmake/ADIOSFunctions.cmake
@@ -47,6 +47,37 @@ function(GenerateADIOSHeaderConfig)
   )
 endfunction()
 
+macro(__adios2_list_cleanup_for_bash var)
+  if(${var})
+    list(REMOVE_DUPLICATES ${var})
+  endif()
+  string(REPLACE ";" " " ${var} "${${var}}")
+endmacro()
+
+function(__adios2_list_make_link_args var)
+  set(prefixes)
+  foreach(lib IN LISTS ${var})
+    if(lib MATCHES "^/")
+      get_filename_component(lib_dir "${lib}" DIRECTORY)
+      list(APPEND prefixes "${lib_dir}")
+    endif()
+  endforeach()
+
+  set(var_new)
+  foreach(prefix IN LISTS prefixes)
+    list(APPEND var_new "-L${prefix}")
+  endforeach()
+  foreach(lib IN LISTS ${var})
+    if(lib MATCHES "^/.*/?(${CMAKE_SHARED_LIBRARY_PREFIX}|${CMAKE_STATIC_LIBRARY_PREFIX})(.*)(${CMAKE_SHARED_LIBRARY_SUFFIX}|${CMAKE_STATIC_LIBRARY_SUFFIX})")
+      list(APPEND var_new "-l${CMAKE_MATCH_2}")
+    else()
+      list(APPEND var_new "${lib}")
+    endif()
+  endforeach()
+
+  set(${var} ${var_new} PARENT_SCOPE)
+endfunction()
+
 function(GenerateADIOSPackageConfig)
   include(CMakePackageConfigHelpers)
 
@@ -93,29 +124,72 @@ function(GenerateADIOSPackageConfig)
   )
 
   # Install helper find modules if needed
+  # Also build flags needed for non-cmake config generation
+  set(ADIOS2_CXX_LIBS ${CMAKE_THREAD_LIBS_INIT})
+  set(ADIOS2_CXX_OPTS ${CMAKE_CXX11_EXTENSION_COMPILE_OPTION})
+  set(ADIOS2_CXX_DEFS)
+  set(ADIOS2_CXX_INCS)
+  if(ADIOS2_HAVE_MPI)
+    list(APPEND ADIOS2_CXX_LIBS ${MPI_C_LIBRARIES})
+    list(APPEND ADIOS2_CXX_INCS ${MPI_C_INCLUDE_PATH})
+  endif()
   if(NOT BUILD_SHARED_LIBS)
+    if(ADIOS2_HAVE_DataMan)
+    list(APPEND ADIOS2_CXX_LIBS -ldataman)
+    endif()
     if(ADIOS2_HAVE_BZip2)
-    install(FILES cmake/FindBZip2.cmake
-      DESTINATION ${CMAKE_INSTALL_CMAKEDIR}/Modules
-    )
-    install(FILES cmake/upstream/FindBZip2.cmake
-      DESTINATION ${CMAKE_INSTALL_CMAKEDIR}/Modules/upstream
-    )
+      install(FILES cmake/FindBZip2.cmake
+        DESTINATION ${CMAKE_INSTALL_CMAKEDIR}/Modules
+      )
+      install(FILES cmake/upstream/FindBZip2.cmake
+        DESTINATION ${CMAKE_INSTALL_CMAKEDIR}/Modules/upstream
+      )
+      list(APPEND ADIOS2_CXX_LIBS ${BZIP2_LIBRARIES})
+      list(APPEND ADIOS2_CXX_INCS ${BZIP2_INCLUDE_DIR})
     endif()
     if(ADIOS2_HAVE_ZFP)
       install(FILES cmake/FindZFP.cmake
         DESTINATION ${CMAKE_INSTALL_CMAKEDIR}/Modules
       )
+      list(APPEND ADIOS2_CXX_LIBS ${ZFP_LIBRARIES})
+      list(APPEND ADIOS2_CXX_INCS ${ZFP_INCLUDE_DIRS})
     endif()
     if(ADIOS2_HAVE_ZeroMQ)
       install(FILES cmake/FindZeroMQ.cmake
         DESTINATION ${CMAKE_INSTALL_CMAKEDIR}/Modules
       )
+      list(APPEND ADIOS2_CXX_LIBS ${ZeroMQ_LIBRARIES})
+      list(APPEND ADIOS2_CXX_INCS ${ZeroMQ_INCLUDE_DIRS})
     endif()
     if(ADIOS2_HAVE_ADIOS1)
       install(FILES cmake/FindADIOS1.cmake
         DESTINATION ${CMAKE_INSTALL_CMAKEDIR}/Modules
       )
+      list(APPEND ADIOS2_CXX_LIBS ${ADIOS1_LIBRARIES})
+      list(APPEND ADIOS2_CXX_INCS ${ADIOS1_INCLUDE_DIRS})
+    endif()
+    if(ADIOS2_HAVE_HDF5)
+      list(APPEND ADIOS2_CXX_LIBS ${HDF5_C_LIBRARIES})
+      if(HDF5_C_INCLUDE_DIRS)
+        list(APPEND ADIOS2_CXX_INCS ${HDF5_C_INCLUDE_DIRS})
+      else()
+        list(APPEND ADIOS2_CXX_INCS ${HDF5_INCLUDE_DIRS})
+      endif()
     endif()
   endif()
+
+  # Build the non-cmake config script
+  __adios2_list_make_link_args(ADIOS2_CXX_LIBS)
+  __adios2_list_cleanup_for_bash(ADIOS2_CXX_LIBS)
+  __adios2_list_cleanup_for_bash(ADIOS2_CXX_OPTS)
+  __adios2_list_cleanup_for_bash(ADIOS2_CXX_DEFS)
+  __adios2_list_cleanup_for_bash(ADIOS2_CXX_INCS)
+  configure_file(
+    ${ADIOS2_SOURCE_DIR}/cmake/adios2-config.in
+    ${ADIOS2_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/adios2-config
+    @ONLY
+  )
+  install(PROGRAMS ${ADIOS2_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/adios2-config
+    DESTINATION ${CMAKE_INSTALL_BINDIR}
+  )
 endfunction()
diff --git a/cmake/adios2-config.in b/cmake/adios2-config.in
new file mode 100755
index 0000000000000000000000000000000000000000..daf25958b6f4301ddf1328d5d251c30ba89841e0
--- /dev/null
+++ b/cmake/adios2-config.in
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+function usage() {
+  echo "Usage: $1 [OPTION]"
+  echo
+  echo "Known values for OPTION are:"
+  echo
+  echo "  --prefix      print installation prefix"
+  echo "  --libs        print library linling information"
+  echo "  --cxxflags    print preprocessor and compiler flags"
+  echo "  --help        display this help and exit"
+  echo "  --version     output version information"
+}
+
+if [ $# -ne 1 ]
+then
+  usage $0
+  exit 1
+fi
+
+prefix=$(readlink -f $(dirname ${BASH_SOURCE})/..)
+ADIOS2_CXX_LIBS=$(echo "@ADIOS2_CXX_LIBS@")
+ADIOS2_CXX_OPTS=$(echo "@ADIOS2_CXX_OPTS@")
+ADIOS2_CXX_DEFS=$(echo "@ADIOS2_CXX_DEFS@")
+ADIOS2_CXX_INCS=$(echo "@ADIOS2_CXX_INCS@")
+
+case $1 in
+  --prefix) echo ${prefix} ;;
+  --libs)
+    echo -n "-L${prefix}/@CMAKE_INSTALL_LIBDIR@ -ladios2 "
+    for LIB in ${ADIOS2_CXX_LIBS}
+    do
+      echo -n "${LIB} "
+    done
+    echo
+    ;;
+  --cxxflags)
+    for OPT in ${ADIOS2_CXX_OPTS}
+    do
+      echo -n "${OPT} "
+    done
+    for DEF in ${ADIOS2_CXX_DEFS}
+    do
+      echo -n "-D${DEF} "
+    done
+    for INC in ${ADIOS2_CXX_INCS}
+    do
+      echo -n "-I${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ "
+    done
+    echo
+    ;;
+  --version) echo @ADIOS2_VERSION@ ;;
+  --help)
+    usage
+    ;;
+  *)
+    usage
+    exit 1
+    ;;
+esac