From 540fa7a418c5a63557e3b36603a61a95bd296bed Mon Sep 17 00:00:00 2001 From: Silvio Date: Sun, 5 Mar 2017 16:16:16 +0100 Subject: Fix tests in Visual Studio 2015 For checking the loading of symbols from the global handle, the printf symbol was loaded, but since Visual Studio 2015 printf is defined as a inline function. To fix this, the test has been modified to load the symbol of the fwrite function. --- test.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/test.c b/test.c index 878694e..e7124ae 100644 --- a/test.c +++ b/test.c @@ -41,7 +41,6 @@ RETURN_ERROR; \ } \ } while( 0 ) - /* This is what this test does: * - Open library with RTLD_GLOBAL @@ -74,7 +73,7 @@ int main() void *library; char *error; int (*function)( void ); - int (*printf_local)( const char * ); + size_t (*fwrite_local) ( const void *, size_t, size_t, FILE * ); int (*nonexistentfunction)( void ); int ret; @@ -108,8 +107,8 @@ int main() else printf( "SUCCESS\tGot global handle: %p\n", global ); - printf_local = dlsym(global, "printf"); - if (!printf_local) + fwrite_local = dlsym(global, "fwrite"); + if (!fwrite_local) { error = dlerror(); printf("ERROR\tCould not get symbol from global handle: %s\n", @@ -119,8 +118,10 @@ int main() RETURN_ERROR; } else - printf("SUCCESS\tGot symbol from global handle: %p\n", printf_local); - printf_local("Hello world from local printf!\n"); + printf("SUCCESS\tGot symbol from global handle: %p\n", fwrite_local); + char * hello_world = "Hello world from local fwrite!\n"; + fwrite_local(hello_world,sizeof(char),strlen(hello_world),stderr); + fflush(stderr); function = dlsym( library, "function" ); if( !function ) @@ -304,7 +305,7 @@ int main() error ? error : "" ); } - function = dlsym(global, "printf"); + function = dlsym(global, "fwrite"); if (!function) { error = dlerror(); @@ -316,6 +317,7 @@ int main() } else printf("SUCCESS\tGot symbol from global handle: %p\n", function); + ret = dlclose( library ); if( ret ) -- cgit v1.2.3-55-g6feb From bf146adb5c9ef6fce7d0db5196e251ba156978be Mon Sep 17 00:00:00 2001 From: Silvio Traversaro Date: Wed, 22 Feb 2017 00:23:40 +0100 Subject: Add appveyor support --- .appveyor.yml | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 .appveyor.yml diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 0000000..fd488ba --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,63 @@ +# Copyright (c) 2014, Ruslan Baratov +# Copyright (c) 2014, 2016 Alexander Lamaison +# Copyright (c) 2017 Silvio Traversaro +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# * 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 HOLDER 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. + +os: Visual Studio 2015 + +environment: + matrix: + - GENERATOR: "Visual Studio 14 2015" + BUILD_SHARED_LIBS: ON + + - GENERATOR: "Visual Studio 14 2015" + BUILD_SHARED_LIBS: OFF + + - GENERATOR: "Visual Studio 12 2013" + BUILD_SHARED_LIBS: ON + + - GENERATOR: "Visual Studio 12 2013" + BUILD_SHARED_LIBS: OFF + +platform: + - x86 + - x64 + +configuration: + - Debug + - Release + +build_script: + - ps: if($env:PLATFORM -eq "x64") { $env:CMAKE_GEN_SUFFIX=" Win64" } + - md build + - cd build + - cmake "-G%GENERATOR%%CMAKE_GEN_SUFFIX%" -DBUILD_SHARED_LIBS=%BUILD_SHARED_LIBS% -DBUILD_TESTS=ON .. + - cmake --build . --config "%CONFIGURATION%" + +test_script: + - ctest --output-on-failure --build-config "%CONFIGURATION%" + +after_test: + - cmake --build . --config "%CONFIGURATION%" --target INSTALL + -- cgit v1.2.3-55-g6feb From e32762ce3ccbd10af00fed78995fb442931e55bb Mon Sep 17 00:00:00 2001 From: Silvio Traversaro Date: Sun, 5 Mar 2017 16:30:10 +0100 Subject: Add AppVeyor badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cd6241a..40bb07b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -dlfcn-win32 +dlfcn-win32 [![Build status](https://ci.appveyor.com/api/projects/status/7bebkh3crggtlnwt/branch/master?svg=true)](https://ci.appveyor.com/project/dlfcn-win32/dlfcn-win32/branch/master) =========== dlfcn-win32 is an implementation of dlfcn for Windows. -- cgit v1.2.3-55-g6feb From d22f7719cb6a610be6cc20cbfbb79698177360cd Mon Sep 17 00:00:00 2001 From: Silvio Date: Sun, 5 Mar 2017 16:48:00 +0100 Subject: Add testing of CMake exported targets --- .appveyor.yml | 13 ++++++++++++- cmake-test/CMakeLists.txt | 14 ++++++++++++++ test.c | 1 + 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 cmake-test/CMakeLists.txt diff --git a/.appveyor.yml b/.appveyor.yml index fd488ba..d97a44e 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -52,7 +52,7 @@ build_script: - ps: if($env:PLATFORM -eq "x64") { $env:CMAKE_GEN_SUFFIX=" Win64" } - md build - cd build - - cmake "-G%GENERATOR%%CMAKE_GEN_SUFFIX%" -DBUILD_SHARED_LIBS=%BUILD_SHARED_LIBS% -DBUILD_TESTS=ON .. + - cmake "-G%GENERATOR%%CMAKE_GEN_SUFFIX%" -DBUILD_SHARED_LIBS=%BUILD_SHARED_LIBS% -DBUILD_TESTS=ON -DCMAKE_INSTALL_PREFIX="./install" .. - cmake --build . --config "%CONFIGURATION%" test_script: @@ -60,4 +60,15 @@ test_script: after_test: - cmake --build . --config "%CONFIGURATION%" --target INSTALL + # Test also the use of dlfcn-win32 from an external CMake project + # Append the instllation directory of dlfcn-win32 to CMAKE_PREFIX_PATH to make sure that the CMake project is found + - set CMAKE_PREFIX_PATH=%APPVEYOR_BUILD_FOLDER%/build/install + # Append the bin installation directory of dlfcn-win32 to the path to make sure that .dll are found + - set PATH=%PATH%;%APPVEYOR_BUILD_FOLDER%/build/install/bin + - cd ../cmake-test + - md build + - cd build + - cmake "-G%GENERATOR%%CMAKE_GEN_SUFFIX%" -DBUILD_SHARED_LIBS=%BUILD_SHARED_LIBS% -DBUILD_TESTS=ON .. + - cmake --build . --config "%CONFIGURATION%" + - ctest --output-on-failure --build-config "%CONFIGURATION%" diff --git a/cmake-test/CMakeLists.txt b/cmake-test/CMakeLists.txt new file mode 100644 index 0000000..532f2b8 --- /dev/null +++ b/cmake-test/CMakeLists.txt @@ -0,0 +1,14 @@ +# Simple CMake project to test the use of dlfcn-win32 +# imported target. The test compiled is the same compiled +# as part of the main dlfcn-win32 project + +cmake_minimum_required(VERSION 3.0) + +find_package(dlfcn-win32 REQUIRED) + +add_library(testdll SHARED ../testdll.c) +set_target_properties(testdll PROPERTIES PREFIX "") +add_executable(t_dlfcn ../test.c) +target_link_libraries(t_dlfcn dlfcn-win32::dl) +enable_testing() +add_test(NAME t_dlfcn COMMAND t_dlfcn) diff --git a/test.c b/test.c index e7124ae..14523ad 100644 --- a/test.c +++ b/test.c @@ -24,6 +24,7 @@ #include #endif #include +#include #include "dlfcn.h" /* If these dlclose's fails, we don't care as the handles are going to be -- cgit v1.2.3-55-g6feb