Skip to content

Commit 465fc89

Browse files
committed
improve cmake build
* use CMAKE_Fortran_MODULE_DIRECTORY to avoid introspecting directory structure * don't build in-source, use test WORKING_DIRECTORY instead * use modern add_test() syntax to avoid introspecting project directory structure * use open(..., action=) to help indicate / safeguard intended file use * don't have to accomodate CMake <= 2.4 circa 2006
1 parent f4b05ac commit 465fc89

File tree

5 files changed

+22
-29
lines changed

5 files changed

+22
-29
lines changed

.github/workflows/main.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ jobs:
5252
run: brew install gcc@${GCC_V} || brew upgrade gcc@${GCC_V} || true
5353

5454
- name: Configure with CMake
55-
run: cmake -Wdev -S . -B . # We should build out of source but loadtxt needs fixing
55+
run: cmake -Wdev -DCMAKE_BUILD_TYPE=Release -B build
5656

5757
- name: Build and compile
58-
run: cmake --build . || cmake --build . --verbose --parallel 1
58+
run: cmake --build build || cmake --build build --verbose --parallel 1
5959

6060
- name: test
61-
run: cmake --build . --target test
61+
run: cmake --build build --target test

CMakeLists.txt

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
cmake_minimum_required(VERSION 3.5.0 FATAL_ERROR)
2-
3-
enable_language(Fortran)
4-
5-
project(stdlib)
6-
1+
cmake_minimum_required(VERSION 3.5.0)
2+
project(stdlib Fortran)
73
enable_testing()
84

5+
# this avoids stdlib and projects using stdlib from having to introspect stdlib's directory structure
6+
set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR})
7+
98
add_subdirectory(src)

src/stdlib_experimental_io.f90

+9-9
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ subroutine sloadtxt(filename, d)
4646
integer :: s
4747
integer :: nrow,ncol,i
4848

49-
open(newunit=s, file=filename, status="old")
49+
open(newunit=s, file=filename, status="old", action="read")
5050

5151
! determine number of columns
5252
ncol = number_of_columns(s)
@@ -89,7 +89,7 @@ subroutine dloadtxt(filename, d)
8989
integer :: s
9090
integer :: nrow,ncol,i
9191

92-
open(newunit=s, file=filename, status="old")
92+
open(newunit=s, file=filename, status="old", action="read")
9393

9494
! determine number of columns
9595
ncol = number_of_columns(s)
@@ -132,7 +132,7 @@ subroutine qloadtxt(filename, d)
132132
integer :: s
133133
integer :: nrow,ncol,i
134134

135-
open(newunit=s, file=filename, status="old")
135+
open(newunit=s, file=filename, status="old", action="read")
136136

137137
! determine number of columns
138138
ncol = number_of_columns(s)
@@ -164,7 +164,7 @@ subroutine ssavetxt(filename, d)
164164
! call savetxt("log.txt", data)
165165

166166
integer :: s, i
167-
open(newunit=s, file=filename, status="replace")
167+
open(newunit=s, file=filename, status="replace", action="write")
168168
do i = 1, size(d, 1)
169169
write(s, *) d(i, :)
170170
end do
@@ -187,7 +187,7 @@ subroutine dsavetxt(filename, d)
187187
! call savetxt("log.txt", data)
188188

189189
integer :: s, i
190-
open(newunit=s, file=filename, status="replace")
190+
open(newunit=s, file=filename, status="replace", action="write")
191191
do i = 1, size(d, 1)
192192
write(s, *) d(i, :)
193193
end do
@@ -210,7 +210,7 @@ subroutine qsavetxt(filename, d)
210210
! call savetxt("log.txt", data)
211211

212212
integer :: s, i
213-
open(newunit=s, file=filename, status="replace")
213+
open(newunit=s, file=filename, status="replace", action="write")
214214
do i = 1, size(d, 1)
215215
write(s, *) d(i, :)
216216
end do
@@ -243,17 +243,17 @@ integer function number_of_rows_numeric(s)
243243
! determine number or rows
244244
integer,intent(in)::s
245245
integer :: ios
246-
246+
247247
real::r
248-
248+
249249
rewind(s)
250250
number_of_rows_numeric = 0
251251
do
252252
read(s, *, iostat=ios) r
253253
if (ios /= 0) exit
254254
number_of_rows_numeric = number_of_rows_numeric + 1
255255
end do
256-
256+
257257
rewind(s)
258258

259259
end function

src/tests/ascii/CMakeLists.txt

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
include_directories(${PROJECT_BINARY_DIR}/src)
2-
31
project(ascii)
42

53
add_executable(test_ascii test_ascii.f90)
64
target_link_libraries(test_ascii fortran_stdlib)
75

8-
add_test(test_ascii ${PROJECT_BINARY_DIR}/test_ascii)
9-
6+
add_test(NAME ASCII COMMAND $<TARGET_FILE:test_ascii>)

src/tests/loadtxt/CMakeLists.txt

+4-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
include_directories(${PROJECT_BINARY_DIR}/src)
2-
31
project(loadtxt)
42

53
add_executable(test_loadtxt test_loadtxt.f90)
@@ -8,8 +6,7 @@ target_link_libraries(test_loadtxt fortran_stdlib)
86
add_executable(test_savetxt test_savetxt.f90)
97
target_link_libraries(test_savetxt fortran_stdlib)
108

11-
add_test(test_loadtxt ${PROJECT_BINARY_DIR}/test_loadtxt)
12-
add_test(test_savetxt ${PROJECT_BINARY_DIR}/test_savetxt)
13-
14-
file(COPY array1.dat array2.dat array3.dat array4.dat
15-
DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
9+
add_test(NAME load_text COMMAND $<TARGET_FILE:test_loadtxt>
10+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
11+
add_test(NAME save_text COMMAND $<TARGET_FILE:test_savetxt>
12+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

0 commit comments

Comments
 (0)