about summary refs log tree commit diff stats
path: root/dirent/CMakeLists.txt
diff options
context:
space:
mode:
authorRory Bradford <roryrjb@gmail.com>2022-11-19 11:11:26 +0000
committerRory Bradford <roryrjb@gmail.com>2022-11-19 11:18:40 +0000
commit0f92f7352d1964a9859868439e8ded2c4de2111e (patch)
tree14c690402fa28c3b465ec00d2fe767054a1a3331 /dirent/CMakeLists.txt
parentfbb7c479de91b197c6c501c2023bf564a6a7610f (diff)
downloadrf-0f92f7352d1964a9859868439e8ded2c4de2111e.tar.gz
Full native win32 support
This will now compile with MSVC using the make.bat batch file. It does
however bring in some additional third party dependencies: ports of
dirent and getopt (something I'd ideally like to work on in the future).

Signed-off-by: Rory Bradford <roryrjb@gmail.com>
Diffstat (limited to 'dirent/CMakeLists.txt')
-rw-r--r--dirent/CMakeLists.txt64
1 files changed, 64 insertions, 0 deletions
diff --git a/dirent/CMakeLists.txt b/dirent/CMakeLists.txt
new file mode 100644
index 0000000..0e002c8
--- /dev/null
+++ b/dirent/CMakeLists.txt
@@ -0,0 +1,64 @@
+cmake_minimum_required(VERSION 2.8.12)
+project(dirent LANGUAGES C CXX)
+
+# User options
+option(DIRENT_BUILD_TESTS "Build bundled tests" ON)
+message(STATUS "Build test and example programs: ${DIRENT_BUILD_TESTS}")
+
+# Initialize C and C++ compilers
+enable_language(C CXX)
+
+# Compile in debug mode by default
+if(NOT CMAKE_BUILD_TYPE)
+    set(CMAKE_BUILD_TYPE Debug
+        CACHE STRING
+        "Type of build: None Debug Release RelWithDebInfo MinSizeRel."
+        FORCE
+    )
+endif(NOT CMAKE_BUILD_TYPE)
+
+# Use the include directory only on Windows
+if(WIN32)
+    include_directories(${CMAKE_SOURCE_DIR}/include)
+endif(WIN32)
+
+# Install dirent.h
+if(WIN32)
+    install(FILES include/dirent.h DESTINATION include)
+endif(WIN32)
+
+# Add distclean target
+add_custom_target(distclean
+    COMMAND ${CMAKE_BUILD_TOOL} clean
+    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/distclean.cmake
+)
+
+# Build example programs
+if(DIRENT_BUILD_TESTS)
+    add_executable(find examples/find.c)
+    add_executable(ls examples/ls.c)
+    add_executable(locate examples/locate.c)
+    add_executable(updatedb examples/updatedb.c)
+    add_executable(scandir examples/scandir.c)
+    add_executable(cat examples/cat.c)
+    add_executable(dir examples/dir.c)
+    add_executable(du examples/du.c)
+
+    # Build test programs
+    include(CTest)
+    add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C ${CMAKE_CFG_INTDIR})
+    function(add_test_executable TEST_NAME)
+        add_executable(${TEST_NAME} EXCLUDE_FROM_ALL ${ARGN})
+        add_test(NAME ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND $<TARGET_FILE:${TEST_NAME}>)
+        add_dependencies(check ${TEST_NAME})
+    endfunction(add_test_executable)
+
+    add_test_executable(t-compile tests/t-compile.c)
+    add_test_executable(t-dirent tests/t-dirent.c)
+    add_test_executable(t-scandir tests/t-scandir.c)
+    add_test_executable(t-unicode tests/t-unicode.c)
+    add_test_executable(t-cplusplus tests/t-cplusplus.cpp)
+    add_test_executable(t-telldir tests/t-telldir.c)
+    add_test_executable(t-strverscmp tests/t-strverscmp.c)
+    add_test_executable(t-utf8 tests/t-utf8.c)
+endif(DIRENT_BUILD_TESTS)