Skip to content

Commit 2decaff

Browse files
author
Elizabeth F
committed
1. Updates to build with Spack
2. Added at unit-tested string_printf() function 3. Improved .gitignore
1 parent 63ab44c commit 2decaff

File tree

9 files changed

+80
-18
lines changed

9 files changed

+80
-18
lines changed

Diff for: .gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,5 @@ build
3131
*~
3232
*.bak
3333
easybuild/
34+
todel
35+
.#*

Diff for: CMakeLists.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ if (NOT DEFINED USE_BLITZ)
3737
set(USE_BLITZ YES)
3838
endif()
3939
if (USE_BLITZ)
40-
find_package(blitz REQUIRED)
40+
find_package(Blitz REQUIRED)
4141
add_definitions(-DUSE_BLITZ)
4242
include_directories(${BLITZ_INCLUDE_DIR})
4343
list(APPEND EXTERNAL_LIBS ${BLITZ_LIBRARY})
@@ -61,7 +61,7 @@ if (NOT DEFINED USE_BOOST)
6161
set(USE_BOOST YES)
6262
endif()
6363
if (USE_BOOST)
64-
find_package(boost COMPONENTS operators optional iterator preprocessor)
64+
find_package(Boost COMPONENTS operators optional iterator preprocessor)
6565
add_definitions(-DUSE_BOOST)
6666
include_directories(${BOOST_INCLUDE_DIRS})
6767
list(APPEND EXTERNAL_LIBS ${BOOST_LIBRARIES})
@@ -93,14 +93,14 @@ include (setup_rpath)
9393

9494
# Include all the transitive dependencies determined by EasyBuild.
9595
# If we're not running with EasyBuild, this does nothing...
96-
include_directories($ENV{EB_INCLUDE_PATH})
96+
include_directories($ENV{CMAKE_TRANSITIVE_INCLUDE_PATH})
9797

9898

9999
# -------- Process subdirectories of the build
100100
add_subdirectory(slib)
101101
#add_subdirectory(bin)
102102
if (USE_GTEST)
103-
find_package(gtest REQUIRED)
103+
find_package(Gtest REQUIRED)
104104
add_subdirectory(tests)
105105
endif()
106106

Diff for: cmake/FindGtest.cmake

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88
FIND_PATH(GTEST_INCLUDE_DIR gtest
99
HINTS ${GTEST_ROOT}/include)
1010

11-
FIND_LIBRARY(GTEST_LIBRARY NAMES gtest
11+
FIND_LIBRARY(GTEST_LIBRARY_MAIN NAMES gtest
1212
HINTS ${GTEST_ROOT}/lib)
1313

14+
list(APPEND GTEST_LIBRARY ${GTEST_LIBRARY_MAIN} -lpthread -lm)
15+
1416
IF (GTEST_INCLUDE_DIR AND GTEST_LIBRARY)
1517
SET(GTEST_FOUND TRUE)
1618
ENDIF (GTEST_INCLUDE_DIR AND GTEST_LIBRARY)

Diff for: cmake/FindNetCDF4_CXX.cmake

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ FIND_PATH(NETCDF4_CXX_INCLUDE_DIR netcdf
99
HINTS ${NETCDF4_CXX_ROOT}/include)
1010

1111
FIND_LIBRARY(NETCDF4_CXX_LIBRARY NAMES netcdf-cxx4
12-
HINTS ${NETCDF4_CXX_ROOT}/lib)
12+
HINTS ${NETCDF4_CXX_ROOT}/lib ${NETCDF4_CXX_ROOT}/lib64)
13+
1314

1415
IF (NETCDF4_CXX_INCLUDE_DIR AND NETCDF4_CXX_LIBRARY)
1516
SET(NETCDF4_CXX_FOUND TRUE)

Diff for: cmake/FindPython.cmake

+24-10
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,21 @@
1111
#endif()
1212

1313
message(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE})
14-
find_program(PYTHON_EXECUTABLE python DOC "python interpreter")
14+
find_program(PYTHON_EXECUTABLE python3 DOC "python interpreter")
15+
#find_program(PYTHON_CONFIG_EXE python3-config DOC "python configuration")
16+
1517

1618
if(PYTHON_EXECUTABLE)
1719
execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "import sysconfig; print (sysconfig.get_path('include'))"
1820
OUTPUT_VARIABLE PYTHON_INCLUDES
1921
RESULT_VARIABLE PYTHON_INCLUDES_NOT_FOUND
2022
OUTPUT_STRIP_TRAILING_WHITESPACE)
2123

22-
execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "import sysconfig; print (sysconfig.get_config_var('LIBPL'))"
23-
OUTPUT_VARIABLE PYTHON_LIBDIR
24-
RESULT_VARIABLE PYTHON_LIBDIR_NOT_FOUND
25-
OUTPUT_STRIP_TRAILING_WHITESPACE)
24+
# execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "import sysconfig; print (sysconfig.get_config_var('LIBPL'))"
25+
# OUTPUT_VARIABLE PYTHON_LIBDIR
26+
# RESULT_VARIABLE PYTHON_LIBDIR_NOT_FOUND
27+
# OUTPUT_STRIP_TRAILING_WHITESPACE)
28+
2629
execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "import sysconfig; print (sysconfig.get_python_version())"
2730
OUTPUT_VARIABLE PYTHON_VERSION
2831
RESULT_VARIABLE PYTHON_VERSION_NOT_FOUND
@@ -38,15 +41,26 @@ if(PYTHON_EXECUTABLE)
3841
RESULT_VARIABLE PYTHON_MAJOR_VERSION_NOT_FOUND
3942
OUTPUT_STRIP_TRAILING_WHITESPACE)
4043

44+
# https://www.python.org/dev/peps/pep-3149/
45+
execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "import sysconfig; print (sysconfig.get_config_var('ABIFLAGS'))"
46+
OUTPUT_VARIABLE PYTHON_ABIFLAGS
47+
RESULT_VARIABLE PYTHON_ABIFLAGS_NOT_FOUND
48+
OUTPUT_STRIP_TRAILING_WHITESPACE)
4149

50+
endif()
4251

52+
message('PYTHON_LIBDIR...........'${PYTHON_LIBDIR})
53+
message("PYTHON_VERSION = " ${PYTHON_VERSION})
54+
message("PYTHON_ABIFLAGS = " ${PYTHON_ABIFLAGS})
55+
message("Find Python Library python${PYTHON_VERSION}${PYTHON_ABIFLAGS}")
4356

44-
endif()
57+
find_library( PYTHON_LIBRARY NAMES "python${PYTHON_VERSION}${PYTHON_ABIFLAGS}"
58+
HINTS ${PYTHON_LIBDIR})
4559

46-
if(PYTHON_LIBDIR)
47-
find_library( PYTHON_LIBRARY "python${PYTHON_VERSION}" HINTS ${PYTHON_LIBDIR} NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_DEFAULT_PATH)
48-
message("python${PYTHON_VERSION}")
49-
endif()
60+
#if(PYTHON_LIBDIR)
61+
# find_library( PYTHON_LIBRARY NAMES "python${PYTHON_VERSION}${PYTHON_ABIFLAGS}")
62+
## HINTS ${PYTHON_LIBDIR} NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_DEFAULT_PATH)
63+
#endif()
5064

5165
message("-- Found PYTHON_EXECUTABLE " ${PYTHON_EXECUTABLE})
5266
message("-- Found PYTHON_VERSION " ${PYTHON_VERSION})

Diff for: slib/CMakeLists.txt

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
# ----------- ibmisc_c
22
set(IBMISC_SOURCE
3+
ibmisc/string.cpp
34
ibmisc/ibmisc.cpp
45
ibmisc/geodesy.cpp
5-
spsparse/spsparse.cpp
66
ibmisc/VarTransformer.cpp
7-
ibmisc/ConstantSet.cpp)
7+
ibmisc/ConstantSet.cpp
8+
spsparse/spsparse.cpp)
9+
810

911
if (USE_PROJ4)
1012
list(APPEND IBMISC_SOURCE ibmisc/Proj2.cpp)

Diff for: slib/ibmisc/string.cpp

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#include <ibmisc/string.hpp>
2+
3+
namespace ibmisc {
4+
5+
/** Like sprintf(), but returns output in a std::string. Uses same
6+
parameters as printf().
7+
@see http://codereview.stackexchange.com/questions/52522/mimic-sprintf-with-stdstring-output */
8+
std::string string_printf(const std::string& format, ...)
9+
{
10+
static const int initial_buf_size = 100;
11+
va_list arglist;
12+
va_start(arglist, format);
13+
char buf1[initial_buf_size];
14+
const int len = vsnprintf(buf1,initial_buf_size,format.c_str(), arglist) + 1;
15+
va_end(arglist);
16+
17+
if(len<initial_buf_size){
18+
return buf1;
19+
} else {
20+
char buf2[len];
21+
va_start(arglist,format);
22+
vsnprintf(buf2,len,format.c_str(),arglist);
23+
va_end(arglist);
24+
return buf2;
25+
}
26+
}
27+
28+
}

Diff for: slib/ibmisc/string.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
#include <algorithm>
22
#include <string>
3+
#include <cstdarg>
34

45
namespace ibmisc {
56

7+
std::string string_printf(const std::string& format, ...);
8+
69
inline void toupper(std::string &str) {
710
std::transform(str.begin(), str.end(), str.begin(), ::toupper);
811
}

Diff for: tests/ibmisc/test_memory.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <gtest/gtest.h>
44
#include <ibmisc/memory.hpp>
5+
#include <ibmisc/string.hpp>
56
#include <iostream>
67
#include <cstdio>
78
#include <memory>
@@ -55,6 +56,15 @@ TEST_F(MemoryTest, lazy_ptr_test)
5556
EXPECT_EQ("hello", *p3);
5657
}
5758

59+
TEST_F(MemoryTest, string_printf)
60+
{
61+
std::string s1(string_printf("Hello World"));
62+
EXPECT_EQ("Hello World", s1);
63+
64+
std::string s2(string_printf("H%s%d", "ello ", 17));
65+
EXPECT_EQ("Hello 17", s2);
66+
}
67+
5868

5969
// -----------------------------------------------------------
6070
// -----------------------------------------------------------

0 commit comments

Comments
 (0)