cmake: enable all tests
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e6673b6..df86dc4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,7 +39,9 @@
   COMMAND git archive --prefix=${ARCHIVE_NAME}/ -o ${ARCHIVE_NAME}.tar.xz HEAD
   WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
   )
-IF(NOT BUILD_SHARED_LIBS)
+IF(BUILD_SHARED_LIBS)
+  SET(HAVE_SHARED TRUE)
+ELSE()
   SET(ZIP_STATIC TRUE)
 ENDIF()
 
@@ -136,6 +138,9 @@
 SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
 SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
 
+# Testing
+ENABLE_TESTING()
+
 # Targets
 ADD_SUBDIRECTORY(lib)
 ADD_SUBDIRECTORY(man)
@@ -159,10 +164,8 @@
 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libzip.pc DESTINATION lib/pkgconfig)
 
 # write out config file
-CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake-config.h.in
-  ${CMAKE_CURRENT_BINARY_DIR}/config.h)
-CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake-zipconf.h.in
-  ${CMAKE_CURRENT_BINARY_DIR}/zipconf.h)
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake-config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake-zipconf.h.in ${CMAKE_CURRENT_BINARY_DIR}/zipconf.h)
 
 # for tests
 
diff --git a/TODO.md b/TODO.md
index b70fd89..32abe20 100644
--- a/TODO.md
+++ b/TODO.md
@@ -10,9 +10,7 @@
   - replace `make distcheck`
   - check generated xcode project
   - add custom targets:
-    - handle_links (one man page for multiple functions)
     - update-errors (zip.h -> zip_errors.mdoc)
-    - regress zip.zip -> zip
     - regress clean up sandboxes
 
 * clone support
diff --git a/cmake-config.h.in b/cmake-config.h.in
index 0d1839c..643cb24 100644
--- a/cmake-config.h.in
+++ b/cmake-config.h.in
@@ -58,6 +58,7 @@
 #cmakedefine HAVE_SYS_DIR_H
 #cmakedefine HAVE_SYS_NDIR_H
 #cmakedefine WORDS_BIGENDIAN
+#cmakedefine HAVE_SHARED
 /* END DEFINES */
 #define PACKAGE "@PACKAGE@"
 #define VERSION "@VERSION@"
diff --git a/regress/CMakeLists.txt b/regress/CMakeLists.txt
index 2c6461d..0133a23 100644
--- a/regress/CMakeLists.txt
+++ b/regress/CMakeLists.txt
@@ -1,17 +1,17 @@
-ENABLE_TESTING()
+# TESTS_ENVIRONMENT=      ZIPCMP=${top_builddir}/src/zipcmp
 
 CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT)
 IF(NOT HAVE_GETOPT)
   SET(SRC_EXTRA_FILES ../src/getopt.c)
 INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}
   ${CMAKE_CURRENT_SOURCE_DIR}/../src)
-ENDIF(NOT HAVE_GETOPT)
+ENDIF()
 
 SET(TEST_PROGRAMS
   add_from_filep
   fopen_unchanged
   fseek
-#  nonrandomopentest
+  nonrandomopentest
 )
 
 SET(GETOPT_USERS
@@ -19,6 +19,57 @@
   tryopen
 )
 
+SET(ENV{srcdir} ${CMAKE_CURRENT_SOURCE_DIR})
+FOREACH(PROGRAM ${TEST_PROGRAMS})
+  ADD_EXECUTABLE(${PROGRAM} ${PROGRAM}.c)
+  TARGET_LINK_LIBRARIES(${PROGRAM} zip)
+ENDFOREACH()
+
+ADD_EXECUTABLE(hole hole.c ${SRC_EXTRA_FILES} source_hole.c)
+TARGET_LINK_LIBRARIES(hole zip)
+
+ADD_EXECUTABLE(ziptool_regress ziptool_regress.c ${SRC_EXTRA_FILES} source_hole.c)
+TARGET_LINK_LIBRARIES(ziptool_regress zip)
+
+ADD_LIBRARY(malloc MODULE malloc.c)
+SET_PROPERTY(TARGET malloc PROPERTY LIBRARY_OUTPUT_NAME malloc)
+ADD_LIBRARY(nonrandomopen MODULE nonrandomopen.c)
+SET_PROPERTY(TARGET nonrandomopen PROPERTY LIBRARY_OUTPUT_NAME nonrandomopen)
+
+FOREACH(PROGRAM ${GETOPT_USERS})
+  ADD_EXECUTABLE(${PROGRAM} ${PROGRAM}.c ${SRC_EXTRA_FILES})
+  TARGET_LINK_LIBRARIES(${PROGRAM} zip)
+ENDFOREACH()
+
+# for appveyor builds
+#SET(CMAKE_MSVCIDE_RUN_PATH C:/projects/libzip/vstudio/zlib/installed/bin;C:/projects/libzip/vstudio/zlib/installed/lib;C:/projects/libzip/build/lib/Release)
+
+ADD_CUSTOM_TARGET(
+  testinput
+  ALL
+  VERBATIM
+  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip cat 0 > manyfiles.zip
+  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip cat 1 > manyfiles-133000.zip
+  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip cat 2 > manyfiles-65536.zip
+  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip cat 3 > manyfiles-zip64-modulo.zip
+  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip cat 4 > manyfiles-zip64.zip
+  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip cat 5 > manyfiles-fewer.zip
+  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip cat 6 > manyfiles-more.zip
+  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/bigzero-zip.zip cat 0 > bigzero.zip
+  DEPENDS ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip ${CMAKE_CURRENT_SOURCE_DIR}/bigzero-zip.zip
+)
+
+SET_PROPERTY(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
+  bigzero.zip
+  manyfiles-133000.zip
+  manyfiles-65536.zip
+  manyfiles-fewer.zip
+  manyfiles-more.zip
+  manyfiles-zip64-modulo.zip
+  manyfiles-zip64.zip
+  manyfiles.zip
+)
+
 SET(EXTRA_TESTS
 	add_dir.test
 	add_from_buffer.test
@@ -53,10 +104,9 @@
 	delete_multiple_partial.test
 	delete_renamed_rename.test
 	encrypt.test
-# TODO: the tests need nonrandomopen.so, which is not hooked into the CMake build
-#	encryption-nonrandom-aes128.test
-#	encryption-nonrandom-aes192.test
-#	encryption-nonrandom-aes256.test
+	encryption-nonrandom-aes128.test
+	encryption-nonrandom-aes192.test
+	encryption-nonrandom-aes256.test
 	encryption-remove.test
 	extra_add.test
 	extra_add_multiple.test
@@ -143,53 +193,10 @@
 	zip64_stored_creation.test
 )
 
-SET(ENV{srcdir} ${CMAKE_CURRENT_SOURCE_DIR})
-FOREACH(PROGRAM ${TEST_PROGRAMS})
-  ADD_EXECUTABLE(${PROGRAM} ${PROGRAM}.c)
-  TARGET_LINK_LIBRARIES(${PROGRAM} zip)
-ENDFOREACH(PROGRAM ${STANDALONE_TEST_PROGRAMS})
-
-ADD_EXECUTABLE(hole hole.c ${SRC_EXTRA_FILES} source_hole.c)
-TARGET_LINK_LIBRARIES(hole zip)
-ADD_EXECUTABLE(ziptool_regress ziptool_regress.c ${SRC_EXTRA_FILES} source_hole.c)
-TARGET_LINK_LIBRARIES(ziptool_regress zip)
-
-FOREACH(PROGRAM ${GETOPT_USERS})
-  ADD_EXECUTABLE(${PROGRAM} ${PROGRAM}.c ${SRC_EXTRA_FILES})
-  TARGET_LINK_LIBRARIES(${PROGRAM} zip)
-ENDFOREACH(PROGRAM ${GETOPT_USERS})
-
-# for appveyor builds
-#SET(CMAKE_MSVCIDE_RUN_PATH C:/projects/libzip/vstudio/zlib/installed/bin;C:/projects/libzip/vstudio/zlib/installed/lib;C:/projects/libzip/build/lib/Release)
-
-ADD_CUSTOM_TARGET(
-  testinput
-  # ALL
-  VERBATIM
-  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip cat 0 > manyfiles.zip
-  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip cat 1 > manyfiles-133000.zip
-  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip cat 2 > manyfiles-65536.zip
-  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip cat 3 > manyfiles-zip64-modulo.zip
-  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip cat 4 > manyfiles-zip64.zip
-  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip cat 5 > manyfiles-fewer.zip
-  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip cat 6 > manyfiles-more.zip
-  COMMAND ziptool ${CMAKE_CURRENT_SOURCE_DIR}/bigzero-zip.zip cat 0 > bigzero.zip
-  DEPENDS ziptool ${CMAKE_CURRENT_SOURCE_DIR}/manyfiles-zip.zip ${CMAKE_CURRENT_SOURCE_DIR}/bigzero-zip.zip
-)
-SET_PROPERTY(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
-  bigzero.zip
-  manyfiles-133000.zip
-  manyfiles-65536.zip
-  manyfiles-fewer.zip
-  manyfiles-more.zip
-  manyfiles-zip64-modulo.zip
-  manyfiles-zip64.zip
-  manyfiles.zip
-)
 
 FOREACH(CASE ${EXTRA_TESTS})
   ADD_TEST(${CASE} perl ${CMAKE_BINARY_DIR}/regress/runtest ${CMAKE_CURRENT_SOURCE_DIR}/${CASE})
-ENDFOREACH(CASE ${EXTRA_TESTS})
+ENDFOREACH()
 
 INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../lib
 	${CMAKE_CURRENT_SOURCE_DIR}/../src
diff --git a/regress/NiHTest.pm b/regress/NiHTest.pm
index 5ab48bc..a19c95e 100644
--- a/regress/NiHTest.pm
+++ b/regress/NiHTest.pm
@@ -340,7 +340,11 @@
                 $preload_env_var = 'DYLD_INSERT_LIBRARIES';
         }
 	if (defined($self->{test}->{'preload'})) {
-		$ENV{$preload_env_var} = cwd() . "/../.libs/$self->{test}->{'preload'}";
+		if (-f cwd() . "/../.libs/$self->{test}->{'preload'}") {
+			$ENV{$preload_env_var} = cwd() . "/../.libs/$self->{test}->{'preload'}";
+		} else {
+			$ENV{$preload_env_var} = cwd() . "/../lib$self->{test}->{'preload'}";
+		}
 	}
 
 	$self->run_program();