include $(TOPDIR)/rules.mk
PKG_NAME:=bonnie++
-PKG_VERSION:=1.98
-PKG_RELEASE:=4
+PKG_VERSION:=2.00a
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz
-PKG_SOURCE_URL:=https://www.coker.com.au/bonnie++/
-PKG_HASH:=6e0bcbc08b78856fd998dd7bcb352d4615a99c26c2dc83d5b8345b102bad0b04
+PKG_SOURCE_URL:=https://www.coker.com.au/bonnie++
+PKG_HASH:=a8d33bbd81bc7eb559ce5bf6e584b9b53faea39ccfb4ae92e58f27257e468f0e
PKG_MAINTAINER:=
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=copyright.txt
-PKG_FIXUP:=autoreconf
-PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+PKG_BUILD_DEPENDS:=meson/host
-include $(INCLUDE_DIR)/uclibc++.mk
include $(INCLUDE_DIR)/package.mk
+include ../../devel/meson/meson.mk
define Package/bonniexx
SECTION:=utils
CATEGORY:=Utilities
- DEPENDS:=$(CXX_DEPENDS) +libpthread
+ DEPENDS:=+libstdcpp +libpthread
TITLE:=Bonnie++ - hard drive bottleneck testing program.
URL:=https://www.coker.com.au/bonnie++/
endef
tests of hard drive and file system performance.
endef
-TARGET_CXXFLAGS += -ffunction-sections -fdata-sections -fno-rtti -flto
+MESON_ARGS += \
+ -Db_lto=true \
+ -Dcpp_eh=none \
+ -Dcpp_rtti=false
+
+TARGET_CXXFLAGS += -ffunction-sections -fdata-sections
define Package/bonniexx/install
$(INSTALL_DIR) $(1)/usr/bin
- $(CP) $(PKG_BUILD_DIR)/bonnie++ $(1)/usr/bin/
- $(CP) $(PKG_BUILD_DIR)/bon_csv2html $(1)/usr/bin/
+ $(CP) $(PKG_INSTALL_DIR)/usr/bin/bonnie++ $(1)/usr/bin/
+ $(CP) $(PKG_INSTALL_DIR)/usr/bin/bon_csv2html $(1)/usr/bin/
endef
$(eval $(call BuildPackage,bonniexx))
--- /dev/null
+--- /dev/null
++++ b/conf.h.meson
+@@ -0,0 +1 @@
++#mesondefine HAVE_ALGORITHM
+--- /dev/null
++++ b/meson.build
+@@ -0,0 +1,73 @@
++project('bonnie++', 'cpp',
++ version : '2.00a',
++ default_options : [ 'cpp_std=c++11' ])
++
++cxx = meson.get_compiler('cpp')
++cdata = configuration_data()
++
++cdata.set('HAVE_ALGORITHM', cxx.has_header('algorithm'))
++
++configure_file(input : 'conf.h.meson',
++ output : 'conf.h',
++ configuration : cdata)
++
++bonniepp_incdir = include_directories('.')
++thread_dep = dependency('threads')
++
++add_global_arguments('-DHAVE_CONFIG_H', language : 'cpp')
++
++executable('bonnie++',
++ 'bonnie++.cpp',
++ 'bon_io.cpp',
++ 'bon_file.cpp',
++ 'bon_time.cpp',
++ 'semaphore.cpp',
++ 'sync.cpp',
++ 'thread.cpp',
++ 'bon_suid.cpp',
++ 'duration.cpp',
++ 'util.cpp',
++ 'rand.cpp',
++ install: true,
++ include_directories : bonniepp_incdir,
++ dependencies : thread_dep,
++)
++
++executable('bon_csv2html',
++ 'bon_csv2html.cpp',
++ install: true,
++ include_directories : bonniepp_incdir,
++)
++
++executable('zcav',
++ 'zcav.cpp',
++ 'thread.cpp',
++ 'zcav_io.cpp',
++ 'bon_suid.cpp',
++ 'duration.cpp',
++ install: true,
++ include_directories : bonniepp_incdir,
++ dependencies : [ thread_dep ]
++)
++
++executable('getc_putc',
++ 'getc_putc.cpp',
++ 'bon_suid.cpp',
++ 'duration.cpp',
++ 'util.cpp',
++ install: true,
++ include_directories : bonniepp_incdir,
++)
++
++executable('getc_putc_helper',
++ 'getc_putc_helper.cpp',
++ 'duration.cpp',
++ install: true,
++ include_directories : bonniepp_incdir,
++)
++
++executable('generate_randfile',
++ 'generate_randfile.cpp',
++ install: true,
++ include_directories : bonniepp_incdir,
++)
+++ /dev/null
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -7,12 +7,6 @@ SCRIPTS=bon_csv2txt
-
- prefix=@prefix@
- eprefix=@exec_prefix@
--#MORE_WARNINGS=-Weffc++
--WFLAGS=-Wall -W -Wshadow -Wpointer-arith -Wwrite-strings -pedantic -ffor-scope -Wcast-align -Wsign-compare -Wpointer-arith -Wwrite-strings -Wformat-security -Wswitch-enum -Winit-self $(MORE_WARNINGS)
--CFLAGS=-O2 @debug@ -DNDEBUG $(WFLAGS) $(MORECFLAGS)
--CXX=@CXX@ $(CFLAGS)
--LINK=@CXX@
--THREAD_LFLAGS=@thread_ldflags@
-
- INSTALL=@INSTALL@
- INSTALL_PROGRAM=@INSTALL_PROGRAM@
-@@ -34,22 +28,22 @@ GETCHSRC=getc_putc_helper.cpp duration.c
- GETCHOBJS=$(GETCHSRC:.cpp=.o)
-
- bonnie++: $(BONOBJS)
-- $(LINK) -o bonnie++ $(BONOBJS) $(THREAD_LFLAGS)
-+ $(CXX) $(CXXFLAGS) -o bonnie++ $(BONOBJS) @thread_ldflags@
-
- zcav: $(ZCAVOBJS)
-- $(LINK) -o zcav $(ZCAVOBJS) $(THREAD_LFLAGS)
-+ $(CXX) $(CXXFLAGS) -o zcav $(ZCAVOBJS) @thread_ldflags@
-
- getc_putc: $(GETCOBJS) getc_putc_helper
-- $(LINK) -o getc_putc $(GETCOBJS) $(THREAD_LFLAGS)
-+ $(CXX) $(CXXFLAGS) -o getc_putc $(GETCOBJS)
-
- getc_putc_helper: $(GETCHOBJS)
-- $(CXX) -o getc_putc_helper $(GETCHOBJS)
-+ $(CXX) $(CXXFLAGS) -o getc_putc_helper $(GETCHOBJS)
-
- bon_csv2html: bon_csv2html.o
-- $(LINK) bon_csv2html.o -o bon_csv2html
-+ $(CXX) $(CXXFLAGS) bon_csv2html.o -o bon_csv2html
-
- generate_randfile: generate_randfile.o
-- $(LINK) generate_randfile.o -o generate_randfile
-+ $(CXX) $(CXXFLAGS) generate_randfile.o -o generate_randfile
-
- install-bin: $(EXE) $(EXES)
- mkdir -p $(eprefix)/bin $(eprefix)/sbin
-@@ -63,7 +57,7 @@ install: install-bin
- @INSTALL_DATA@ $(MAN8) @mandir@/man8
-
- %.o: %.cpp
-- $(CXX) -c $<
-+ $(CXX) $(CXXFLAGS) -c $<
-
- clean:
- rm -f $(EXE) $(EXES) *.o build-stamp install-stamp
---- a/configure.in
-+++ b/configure.in
-@@ -31,7 +31,6 @@ fi
-
- dnl Checks for programs.
- AC_LANG_CPLUSPLUS
--AC_PROG_CC
- AC_PROG_CXX
- AC_PROG_CXXCPP
- AC_PROG_INSTALL
-@@ -66,7 +65,7 @@ AC_SUBST(linux_pthread)
- AC_TRY_COMPILE([#define _GNU_SOURCE
- #include <pthread.h>
- ] , [pthread_mutexattr_t attr;
-- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);]
-+ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);]
- , linux_pthread="yes")
- if [[ -n "$linux_pthread" ]]; then
- linux_pthread="#define LINUX_PTHREAD"
-@@ -83,7 +82,7 @@ void * thread_func(void * param) { retur
- , thread_ldflags="-pthread")
-
- AC_SUBST(large_file)
--AC_TRY_RUN([#ifndef _LARGEFILE64_SOURCE
-+AC_TRY_COMPILE([#ifndef _LARGEFILE64_SOURCE
- #define _LARGEFILE64_SOURCE
- #endif
- #include <stdio.h>
--- /dev/null
+From 4f60ce245b3cfe2117fdaf00a9e74a49f769daca Mon Sep 17 00:00:00 2001
+From: Rosen Penev <rosenp@gmail.com>
+Date: Mon, 22 Feb 2021 16:03:21 -0800
+Subject: [PATCH] remove using namespace std
+
+Fixes: warning: using directive refers to implicitly-defined namespace 'std'
+
+Signed-off-by: Rosen Penev <rosenp@gmail.com>
+---
+ bon_time.cpp | 8 ++++----
+ bonnie++.cpp | 8 ++++----
+ bonnie.h | 2 --
+ duration.cpp | 4 +---
+ getc_putc.cpp | 2 +-
+ rand.cpp | 4 ++--
+ rand.h | 5 ++---
+ 7 files changed, 14 insertions(+), 19 deletions(-)
+
+--- a/bon_time.cpp
++++ b/bon_time.cpp
+@@ -26,12 +26,12 @@ void BonTimer::add_delta_report(report_s
+ }
+ else
+ {
+- m_delta[test].FirstStart = min(m_delta[test].FirstStart, rep.StartTime);
+- m_delta[test].LastStop = max(m_delta[test].LastStop, rep.EndTime);
++ m_delta[test].FirstStart = std::min(m_delta[test].FirstStart, rep.StartTime);
++ m_delta[test].LastStop = std::max(m_delta[test].LastStop, rep.EndTime);
+ }
+ m_delta[test].CPU += rep.CPU;
+ m_delta[test].Elapsed = m_delta[test].LastStop - m_delta[test].FirstStart;
+- m_delta[test].Latency = max(m_delta[test].Latency, rep.Latency);
++ m_delta[test].Latency = std::max(m_delta[test].Latency, rep.Latency);
+ }
+
+ BonTimer::BonTimer()
+@@ -56,7 +56,7 @@ BonTimer::Initialize()
+ void
+ BonTimer::add_latency(tests_t test, double t)
+ {
+- m_delta[test].Latency = max(m_delta[test].Latency, t);
++ m_delta[test].Latency = std::max(m_delta[test].Latency, t);
+ }
+
+ int BonTimer::print_cpu_stat(tests_t test)
+--- a/bonnie++.cpp
++++ b/bonnie++.cpp
+@@ -75,7 +75,7 @@ public:
+ void set_io_chunk_size(int size)
+ { delete m_buf; pa_new(size, m_buf, m_buf_pa); m_io_chunk_size = size; }
+ void set_file_chunk_size(int size)
+- { delete m_buf; m_buf = new char[max(size, m_io_chunk_size)]; m_file_chunk_size = size; }
++ { delete m_buf; m_buf = new char[std::max(size, m_io_chunk_size)]; m_file_chunk_size = size; }
+
+ // Return the page-aligned version of the local buffer
+ char *buf() { return m_buf_pa; }
+@@ -142,7 +142,7 @@ CGlobalItems::CGlobalItems(bool *exitFla
+ , m_buf(NULL)
+ , m_buf_pa(NULL)
+ {
+- pa_new(max(m_io_chunk_size, m_file_chunk_size), m_buf, m_buf_pa);
++ pa_new(std::max(m_io_chunk_size, m_file_chunk_size), m_buf, m_buf_pa);
+ SetName(".");
+ }
+
+@@ -407,8 +407,8 @@ int main(int argc, char *argv[])
+ usage();
+ }
+ #endif
+- globals.byte_io_size = min(file_size, globals.byte_io_size);
+- globals.byte_io_size = max(0, globals.byte_io_size);
++ globals.byte_io_size = std::min(file_size, globals.byte_io_size);
++ globals.byte_io_size = std::max(0, globals.byte_io_size);
+
+ if(machine == NULL)
+ {
+--- a/bonnie.h
++++ b/bonnie.h
+@@ -1,8 +1,6 @@
+ #ifndef BONNIE
+ #define BONNIE
+
+-using namespace std;
+-
+ #define BON_VERSION "2.00"
+ #define CSV_VERSION "1.98"
+
+--- a/duration.cpp
++++ b/duration.cpp
+@@ -1,5 +1,3 @@
+-using namespace std;
+-
+ #include <stdlib.h>
+
+ #include "duration.h"
+@@ -38,7 +36,7 @@ double Duration_Base::stop()
+ getTime(&tv);
+ double ret;
+ ret = tv - m_start;
+- m_max = max(m_max, ret);
++ m_max = std::max(m_max, ret);
+ return ret;
+ }
+
+--- a/getc_putc.cpp
++++ b/getc_putc.cpp
+@@ -140,7 +140,7 @@ int main(int argc, char *argv[])
+ int size = 0, wrote;
+ while(size < file_size)
+ {
+- wrote = write(FILE_FD, buf, min(sizeof(buf), (size_t)file_size - size));
++ wrote = write(FILE_FD, buf, std::min(sizeof(buf), (size_t)file_size - size));
+ if(wrote < 0)
+ {
+ fprintf(stderr, "Can't extend file - disk full?\n");
+--- a/rand.cpp
++++ b/rand.cpp
+@@ -31,7 +31,7 @@ bool Rand::seedFile(CPCCHAR name)
+ }
+ close(fd);
+ m_ind = -1;
+- m_name = string(name);
++ m_name = std::string(name);
+ return false;
+ }
+
+@@ -44,7 +44,7 @@ void Rand::seedNum(UINT num)
+ m_init = num;
+ char buf[12];
+ sprintf(buf, "%u", num);
+- m_name = string(buf);
++ m_name = std::string(buf);
+ }
+
+ void Rand::reset()
+--- a/rand.h
++++ b/rand.h
+@@ -1,7 +1,6 @@
+ #ifndef RAND_H
+ #define RAND_H
+
+-using namespace std;
+ #include "port.h"
+ #include <string>
+ #include <stdio.h>
+@@ -31,7 +30,7 @@ public:
+
+ int getSize() { return m_size; }
+
+- string getSeed() { return m_name; }
++ std::string getSeed() { return m_name; }
+
+ void reset();
+
+@@ -39,7 +38,7 @@ private:
+ int *m_arr;
+ int m_size;
+ int m_ind;
+- string m_name;
++ std::string m_name;
+ UINT m_init;
+
+ Rand(const Rand &t);
--- /dev/null
+From 4f4d854b7758da89ced4dc800fcbec11667d61c8 Mon Sep 17 00:00:00 2001
+From: Rosen Penev <rosenp@gmail.com>
+Date: Mon, 22 Feb 2021 16:05:54 -0800
+Subject: [PATCH] fix wrong printf off_t format
+
+It's long vs. long long. There's a macro for this.
+
+Signed-off-by: Rosen Penev <rosenp@gmail.com>
+---
+ port.h | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+--- a/port.h
++++ b/port.h
+@@ -3,14 +3,13 @@
+
+ #include "conf.h"
+
+-
+-
++#include <inttypes.h>
+
+ #ifndef _LARGEFILE64_SOURCE
+ #define _LARGEFILE64_SOURCE
+ #endif
+ #ifdef _LARGEFILE64_SOURCE
+-#define OFF_T_PRINTF "%lld"
++#define OFF_T_PRINTF "%" PRId64
+ #else
+ #define OFF_T_PRINTF "%d"
+ #endif
--- /dev/null
+From 2e3e25454a165d55cbcd4fc78539454d4e0d8d51 Mon Sep 17 00:00:00 2001
+From: Rosen Penev <rosenp@gmail.com>
+Date: Mon, 22 Feb 2021 16:07:02 -0800
+Subject: [PATCH] add missing cast
+
+Fixes -Wformat
+
+Signed-off-by: Rosen Penev <rosenp@gmail.com>
+---
+ bon_time.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/bon_time.cpp
++++ b/bon_time.cpp
+@@ -146,7 +146,7 @@ int BonTimer::print_stat(tests_t test, i
+ }
+ else
+ {
+- fprintf(m_fp, " %5d", stat);
++ fprintf(m_fp, " %5d", int(stat));
+ }
+ }
+ else