commit e706b75756accff499dd65192b3efcb7dd963ba7
parent cf20bd4f69dd654415383be27263a9c01dc10e2a
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 27 May 2015 12:14:23 +0200
Make the library compliant with the CL compiler
Diffstat:
2 files changed, 38 insertions(+), 15 deletions(-)
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
@@ -36,8 +36,8 @@ option(NO_TEST "Disable the test" OFF)
################################################################################
# Check dependencies
################################################################################
-find_package(AW 1.0.1 REQUIRED)
-find_package(Polygon 0.0.1 REQUIRED)
+find_package(AW 1.0.2 REQUIRED)
+find_package(Polygon 0.0.3 REQUIRED)
find_package(RCMake 0.1 REQUIRED)
find_package(RSys 0.2 REQUIRED)
find_package(Star3D 0.1 REQUIRED)
@@ -88,18 +88,10 @@ rcmake_setup_devel(s3daw Star3DAW ${VERSION} star/s3daw_version.h)
# Add tests
################################################################################
if(NOT NO_TEST)
- function(new_test _name)
- add_executable(${_name}
- ${S3DAW_SOURCE_DIR}/${_name}.c)
- target_link_libraries(${_name} s3daw RSys Star3D)
- set(_libraries ${ARGN})
- foreach(_lib ${_libraries})
- target_link_libraries(${_name} ${_lib})
- endforeach()
- add_test(${_name} ${_name})
- endfunction()
-
- new_test(test_s3daw)
+ add_executable(test_s3daw ${S3DAW_SOURCE_DIR}/test_s3daw.c)
+ target_link_libraries(test_s3daw s3daw RSys Star3D)
+ add_test(test_s3daw test_s3daw)
+ rcmake_copy_runtime_libraries(test_s3daw)
endif()
################################################################################
diff --git a/src/s3daw.c b/src/s3daw.c
@@ -44,7 +44,10 @@
#include <aw.h>
#include <polygon.h>
#include <string.h>
-#include <libgen.h> /* dirname */
+
+#ifdef COMPILER_GCC
+ #include <libgen.h> /* dirname */
+#endif
#define DARRAY_NAME shape
#define DARRAY_DATA struct s3d_shape*
@@ -128,6 +131,34 @@ get_position(const unsigned ivert, float pos[3], void* ctx)
f3_set(pos, vertex->position);
}
+#ifdef COMPILER_CL
+static INLINE char*
+dirname(char* filename)
+{
+ char drive[_MAX_DRIVE];
+ char dir[_MAX_DIR];
+ size_t drive_len, dir_len;
+ errno_t err;
+ ASSERT(filename);
+
+ err = _splitpath_s
+ (filename, drive, sizeof(drive), dir, sizeof(dir), NULL, 0, NULL, 0);
+ ASSERT(err == 0);
+ drive_len = strlen(drive);
+ dir_len = strlen(dir);
+ if(!drive_len && !dir_len) {
+ ASSERT(strlen(filename) >= 1);
+ filename[0] = '.';
+ filename[1] = '\0';
+ } else {
+ ASSERT(strlen(filename) >= drive_len + dir_len);
+ strncpy(filename, drive, drive_len);
+ strncpy(filename + drive_len, dir, dir_len);
+ }
+ return filename;
+}
+#endif
+
static INLINE res_T
get_dirname(const char* filename, struct darray_char* filedir)
{