diff --git a/CMakeLists.txt b/CMakeLists.txt index f568ef4..d86ffd9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required (VERSION 3.0) cmake_policy(VERSION 3.0) -project (mazemaker VERSION 1.4) +project (mazemaker VERSION 1.5) SET(EXEC_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Installation prefix for executables and object code libraries" FORCE) SET(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include CACHE PATH "Installation prefix for C header files" FORCE) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 1b9d622..9756998 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,5 +1,8 @@ project(mazemaker_lib) cmake_minimum_required (VERSION 2.8.12) + +include(CheckSymbolExists) + set (mazemaker_SOVERSION_CURRENT 0) set (mazemaker_SOVERSION_REVISION 2) set (mazemaker_SOVERSION_AGE 0) @@ -11,6 +14,11 @@ set (mazemaker_SOVERSION ${mazemaker_SOVERSION_MAJOR}.${mazemaker_SOVERSION_MINO find_package(PkgConfig REQUIRED) pkg_search_module(PNG REQUIRED libpng) +check_symbol_exists(arc4random_uniform "stdlib.h" HAVE_ARC4RANDOM) + +configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" + "${CMAKE_CURRENT_SOURCE_DIR}/config.h" ) + file(GLOB SOURCES *.c *.h) add_library(mazemaker_shared SHARED ${SOURCES}) diff --git a/lib/config.h.in b/lib/config.h.in new file mode 100644 index 0000000..1fd29b9 --- /dev/null +++ b/lib/config.h.in @@ -0,0 +1 @@ +#cmakedefine HAVE_ARC4RANDOM "@HAVE_ARC4RANDOM@" diff --git a/lib/grid.c b/lib/grid.c index 6d36d52..b4e2b78 100644 --- a/lib/grid.c +++ b/lib/grid.c @@ -1,5 +1,6 @@ #include #include "grid.h" +#include "config.h" #define MAX_EDGE_WEIGHT 100 #define TOP_LEFT_CORNER "\xe2\x94\x8f" @@ -18,6 +19,14 @@ #define HORIZONTAL_HALF_LEFT "\xe2\x95\xb8" #define HORIZONTAL_HALF_RIGHT "\xe2\x95\xba" +static edgeweight_t random_edgeweight() { +#ifdef HAVE_ARC4RANDOM + return arc4random_uniform(MAX_EDGE_WEIGHT); +#else // HAVE_ARC4RANDOM + return random()%MAX_EDGE_WEIGHT; +#endif // HAVE_ARC4RANDOM +} + mazegrid_t mazegrid_new(size_t width, size_t height) { mazeedges_t** grid = calloc(height, sizeof(mazeedges_t*)); for (size_t i = 0; i < height; i++) { @@ -66,8 +75,8 @@ edgeweight_t mazegrid_get_edge(mazegrid_t const* g, size_t x, size_t y, mazeedge void mazegrid_randomize(mazegrid_t* g) { for (size_t i = 0; i < g->height; i++) { for (size_t j = 0; j < g->width; j++) { - if (i < g->height - 1) g->grid[i][j].up = (edgeweight_t)(random()%MAX_EDGE_WEIGHT); - if (j < g->width - 1) g->grid[i][j].right = (edgeweight_t)(random()%MAX_EDGE_WEIGHT); + if (i < g->height - 1) g->grid[i][j].up = random_edgeweight(); + if (j < g->width - 1) g->grid[i][j].right = random_edgeweight(); } } }