diff --git a/environment.yml b/environment.yml new file mode 100644 index 00000000..f4400896 --- /dev/null +++ b/environment.yml @@ -0,0 +1,13 @@ +name: hdtv +channels: + - conda-forge +dependencies: + - python=3.13 + - hsluv + - ipython + - matplotlib + - numpy + - prompt_toolkit >= 3.0.14 + - scipy + - traitlets + - uncertainties diff --git a/src/hdtv/app.py b/src/hdtv/app.py index 8b32245f..3bd2df4e 100755 --- a/src/hdtv/app.py +++ b/src/hdtv/app.py @@ -108,14 +108,16 @@ def __init__(self): hdtv.rootext.dlmgr.RebuildLibraries( hdtv.rootext.dlmgr.usrdir, libraries=args.rebuildusr or None ) + print("Usr build process is complete! Existing ...") + sys.exit(0) + if args.rebuildsys is not None: import hdtv.rootext.dlmgr hdtv.rootext.dlmgr.RebuildLibraries( hdtv.rootext.dlmgr.sysdir, libraries=args.rebuildsys or None ) - - if args.rebuildusr or args.rebuildsys: + print("System build process is complete! Existing ..") sys.exit(0) check_root_version() diff --git a/src/hdtv/cmdline.py b/src/hdtv/cmdline.py index b6871f72..082fedfb 100644 --- a/src/hdtv/cmdline.py +++ b/src/hdtv/cmdline.py @@ -453,7 +453,7 @@ def _loop(loop): def SetHistory(self, path): if not os.access(path, os.W_OK): - hdtv.ui.error(f"History file '{path}' is read-only, will be discarded") + hdtv.ui.msg(f"History file '{path}' doesn't exist or is read only, will be discarded") self.history = FileHistory(path) def RegisterInteractive(self, name, ref): diff --git a/src/hdtv/database/common.py b/src/hdtv/database/common.py index c3983168..7ad512e2 100644 --- a/src/hdtv/database/common.py +++ b/src/hdtv/database/common.py @@ -5,6 +5,7 @@ import hdtv.cmdline import hdtv.ui +import warnings class _Element: @@ -188,7 +189,10 @@ def __init__(self, csvfile=None): else: abd = None if line[3].strip(): - M = ufloat_fromstr(line[3].strip()) + # NOTE: Some entries are zero here. Disable warnings here. + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + M = ufloat_fromstr(line[3].strip()) else: M = None if line[4].strip(): diff --git a/src/hdtv/rootext/calibration/CMakeLists.txt b/src/hdtv/rootext/calibration/CMakeLists.txt index b16b0a75..7e5eca11 100644 --- a/src/hdtv/rootext/calibration/CMakeLists.txt +++ b/src/hdtv/rootext/calibration/CMakeLists.txt @@ -2,46 +2,31 @@ cmake_minimum_required(VERSION 3.15 FATAL_ERROR) project(calibration LANGUAGES CXX) -set(SOURCES Calibration.cc) +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake) +include(install_setup) -set(HEADERS Calibration.hh) +find_package(ROOT REQUIRED CONFIG COMPONENTS Core Hist Graf Gui) -find_package(ROOT REQUIRED COMPONENTS Core Hist) message(STATUS "ROOT Version ${ROOT_VERSION} found in ${ROOT_root_CMD}") -if(${ROOT_VERSION_MINOR} GREATER_EQUAL 20) - include(${ROOT_DIR}/RootMacros.cmake) -elseif(${ROOT_VERSION_MINOR} EQUAL 19 AND EXISTS ${ROOT_DIR}/RootMacros.cmake) - include(${ROOT_DIR}/RootMacros.cmake) -else() - include(${ROOT_DIR}/modules/RootNewMacros.cmake) -endif() - -root_generate_dictionary( - G__${PROJECT_NAME} - ${HEADERS} - LINKDEF - LinkDef.h) - -add_library(${PROJECT_NAME} SHARED ${SOURCES} G__${PROJECT_NAME}.cxx) + +add_library(${PROJECT_NAME} SHARED) add_library(hdtv::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) -target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_14) -set_target_properties( - ${PROJECT_NAME} - PROPERTIES - RESOURCE - "${CMAKE_CURRENT_BINARY_DIR}/lib${PROJECT_NAME}.rootmap;${CMAKE_CURRENT_BINARY_DIR}/lib${PROJECT_NAME}_rdict.pcm" +target_sources( + ${PROJECT_NAME} + PRIVATE Calibration.cc + PUBLIC + FILE_SET HEADERS + BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} + FILES Calibration.hh ) -target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +root_generate_dictionary(G__${PROJECT_NAME} Calibration.hh MODULE ${PROJECT_NAME} LINKDEF LinkDef.h) + +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_14) target_link_libraries( - ${PROJECT_NAME} - ROOT::Core - ROOT::Hist - ROOT::Graf - ROOT::Gui) - -install( - TARGETS ${PROJECT_NAME} - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - RESOURCE DESTINATION lib) + ${PROJECT_NAME} + PRIVATE ROOT::Core ROOT::Hist ROOT::Graf ROOT::Gui +) + +install(TARGETS ${PROJECT_NAME} FILE_SET HEADERS) diff --git a/src/hdtv/rootext/cmake/install_setup.cmake b/src/hdtv/rootext/cmake/install_setup.cmake new file mode 100644 index 00000000..42e217be --- /dev/null +++ b/src/hdtv/rootext/cmake/install_setup.cmake @@ -0,0 +1,20 @@ +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + +if(APPLE) + set(BASE_DIR "@loader_path") +else() + set(BASE_DIR "$ORIGIN") +endif() + +include(GNUInstallDirs) +set(CMAKE_INSTALL_LIBDIR lib) + +file( + RELATIVE_PATH + relDir + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR} + ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR} +) +set(CMAKE_INSTALL_RPATH ${BASE_DIR} ${BASE_DIR}/${relDir}) diff --git a/src/hdtv/rootext/display/CMakeLists.txt b/src/hdtv/rootext/display/CMakeLists.txt index 363d7d3c..f60396cf 100644 --- a/src/hdtv/rootext/display/CMakeLists.txt +++ b/src/hdtv/rootext/display/CMakeLists.txt @@ -2,22 +2,8 @@ cmake_minimum_required(VERSION 3.15 FATAL_ERROR) project(display LANGUAGES CXX) -set(SOURCES - DisplayBlock.cc - DisplayCut.cc - DisplayFunc.cc - DisplayObj.cc - DisplaySpec.cc - DisplayStack.cc - Marker.cc - MTViewer.cc - Painter.cc - View1D.cc - View2D.cc - View.cc - Viewer.cc - XMarker.cc - YMarker.cc) +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake) +include(install_setup) set(HEADERS DisplayBlock.hh @@ -35,55 +21,48 @@ set(HEADERS Viewer.hh View.hh XMarker.hh - YMarker.hh) + YMarker.hh +) find_package(X11 REQUIRED) - -find_package( - ROOT REQUIRED - COMPONENTS Core - Hist - Graf - Gui) +find_package(ROOT REQUIRED CONFIG COMPONENTS Core Hist Graf Gui) message(STATUS "ROOT Version ${ROOT_VERSION} found in ${ROOT_root_CMD}") -if(${ROOT_VERSION_MINOR} GREATER_EQUAL 20) - include(${ROOT_DIR}/RootMacros.cmake) -elseif(${ROOT_VERSION_MINOR} EQUAL 19 AND EXISTS ${ROOT_DIR}/RootMacros.cmake) - include(${ROOT_DIR}/RootMacros.cmake) -else() - include(${ROOT_DIR}/modules/RootNewMacros.cmake) -endif() - -root_generate_dictionary( - G__${PROJECT_NAME} - ${HEADERS} - LINKDEF - LinkDef.h - OPTIONS - -I${CMAKE_CURRENT_SOURCE_DIR}/../calibration) -add_library(${PROJECT_NAME} SHARED ${SOURCES} G__${PROJECT_NAME}.cxx) +add_library(${PROJECT_NAME} SHARED) add_library(hdtv::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) -target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_14) -set_target_properties( - ${PROJECT_NAME} - PROPERTIES - RESOURCE - "${CMAKE_CURRENT_BINARY_DIR}/lib${PROJECT_NAME}.rootmap;${CMAKE_CURRENT_BINARY_DIR}/lib${PROJECT_NAME}_rdict.pcm" +target_sources( + ${PROJECT_NAME} + PRIVATE + DisplayBlock.cc + DisplayCut.cc + DisplayFunc.cc + DisplayObj.cc + DisplaySpec.cc + DisplayStack.cc + Marker.cc + MTViewer.cc + Painter.cc + View1D.cc + View2D.cc + View.cc + Viewer.cc + XMarker.cc + YMarker.cc + PUBLIC + FILE_SET HEADERS BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} FILES ${HEADERS} ) -target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/../calibration) + +# HACK: Should link to calibration via find_package instead. +target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../calibration) + +root_generate_dictionary(G__${PROJECT_NAME} ${HEADERS} MODULE ${PROJECT_NAME} LINKDEF LinkDef.h) + +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_14) + target_link_libraries( - ${PROJECT_NAME} - ROOT::Core - ROOT::Hist - ROOT::Graf - ROOT::Gui - X11) + ${PROJECT_NAME} + PRIVATE ROOT::Core ROOT::Hist ROOT::Graf ROOT::Gui X11 +) -install( - TARGETS ${PROJECT_NAME} - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - RESOURCE DESTINATION lib) +install(TARGETS ${PROJECT_NAME} FILE_SET HEADERS) diff --git a/src/hdtv/rootext/fit/CMakeLists.txt b/src/hdtv/rootext/fit/CMakeLists.txt index 7de3f6c7..04171bb0 100644 --- a/src/hdtv/rootext/fit/CMakeLists.txt +++ b/src/hdtv/rootext/fit/CMakeLists.txt @@ -2,6 +2,9 @@ cmake_minimum_required(VERSION 3.15 FATAL_ERROR) project(fit LANGUAGES CXX) +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake) +include(install_setup) + set(SOURCES EEFitter.cc ExpBg.cc @@ -11,7 +14,8 @@ set(SOURCES Param.cc PolyBg.cc TheuerkaufFitter.cc - Util.cc) + Util.cc +) set(HEADERS Background.hh @@ -24,43 +28,37 @@ set(HEADERS Param.hh PolyBg.hh TheuerkaufFitter.hh - Util.hh) + Util.hh +) -find_package(ROOT REQUIRED COMPONENTS Core Hist) +find_package(ROOT REQUIRED CONFIG COMPONENTS Core Hist MathMore) message(STATUS "ROOT Version ${ROOT_VERSION} found in ${ROOT_root_CMD}") -if(${ROOT_VERSION_MINOR} GREATER_EQUAL 20) - include(${ROOT_DIR}/RootMacros.cmake) -elseif(${ROOT_VERSION_MINOR} EQUAL 19 AND EXISTS ${ROOT_DIR}/RootMacros.cmake) - include(${ROOT_DIR}/RootMacros.cmake) -else() - include(${ROOT_DIR}/modules/RootNewMacros.cmake) -endif() -root_generate_dictionary( - G__${PROJECT_NAME} - ${HEADERS} - LINKDEF - LinkDef.h) - -add_library(${PROJECT_NAME} SHARED ${SOURCES} G__${PROJECT_NAME}.cxx) +add_library(${PROJECT_NAME} SHARED) add_library(hdtv::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) -target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_14) -set_target_properties( - ${PROJECT_NAME} - PROPERTIES - RESOURCE - "${CMAKE_CURRENT_BINARY_DIR}/lib${PROJECT_NAME}.rootmap;${CMAKE_CURRENT_BINARY_DIR}/lib${PROJECT_NAME}_rdict.pcm" +target_sources( + ${PROJECT_NAME} + PRIVATE + EEFitter.cc + ExpBg.cc + Fitter.cc + Integral.cc + InterpolationBg.cc + Param.cc + PolyBg.cc + TheuerkaufFitter.cc + Util.cc + PUBLIC + FILE_SET HEADERS BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} FILES ${HEADERS} ) -target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +root_generate_dictionary(G__${PROJECT_NAME} ${HEADERS} MODULE ${PROJECT_NAME} LINKDEF LinkDef.h) + +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_14) target_link_libraries( - ${PROJECT_NAME} - ROOT::Core - ROOT::Hist - ROOT::MathMore) + ${PROJECT_NAME} + PRIVATE ROOT::Core ROOT::Hist ROOT::MathMore +) -install( - TARGETS ${PROJECT_NAME} - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - RESOURCE DESTINATION lib) +install(TARGETS ${PROJECT_NAME} FILE_SET HEADERS) diff --git a/src/hdtv/rootext/mfile-root/CMakeLists.txt b/src/hdtv/rootext/mfile-root/CMakeLists.txt index 5a4c7423..133b172a 100644 --- a/src/hdtv/rootext/mfile-root/CMakeLists.txt +++ b/src/hdtv/rootext/mfile-root/CMakeLists.txt @@ -1,102 +1,35 @@ -cmake_minimum_required(VERSION 3.15 FATAL_ERROR) +cmake_minimum_required(VERSION 3.24) -# add_subdirectory(mfile) +project(mfile-root LANGUAGES CXX C) -project(mfile-root LANGUAGES C CXX) +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake) -set(SOURCES - MatOp.cc - MFileHist.cc - MFileRoot.cc - VMatrix.cc - matop/matop_adjust.c - matop/matop_conv.c - matop/matop_project.c - mfile/src/callindir.c - mfile/src/converters.c - mfile/src/disk_access.c - mfile/src/getputint.c - mfile/src/gf2_getput.c - mfile/src/gf2_minfo.c - mfile/src/lc_c1.c - mfile/src/lc_c2.c - mfile/src/lc_getput.c - mfile/src/lc_minfo.c - mfile/src/maccess.c - mfile/src/mate_getput.c - mfile/src/mate_minfo.c - mfile/src/mat_types.c - mfile/src/minfo.c - mfile/src/mopen.c - mfile/src/oldmat_getput.c - mfile/src/oldmat_minfo.c - mfile/src/shm_access.c - mfile/src/shm_getput.c - mfile/src/shm_minfo.c - mfile/src/specio.c - mfile/src/trixi_getput.c - mfile/src/trixi_minfo.c - mfile/src/txt_getput.c - mfile/src/txt_minfo.c) +include(install_setup) -set(HEADERS - MatOp.hh - MFileHist.hh - MFileRoot.hh - VMatrix.hh - matop/matop.h - matop/matop_adjust.h - matop/matop_conv.h - matop/matop_project.h) +find_package(ROOT REQUIRED CONFIG COMPONENTS Core Hist) -find_package(ROOT REQUIRED COMPONENTS Core Hist) message(STATUS "ROOT Version ${ROOT_VERSION} found in ${ROOT_root_CMD}") -if(${ROOT_VERSION_MINOR} GREATER_EQUAL 20) - include(${ROOT_DIR}/RootMacros.cmake) -elseif(${ROOT_VERSION_MINOR} EQUAL 19 AND EXISTS ${ROOT_DIR}/RootMacros.cmake) - include(${ROOT_DIR}/RootMacros.cmake) -else() - include(${ROOT_DIR}/modules/RootNewMacros.cmake) -endif() -root_generate_dictionary( - G__${PROJECT_NAME} - ${HEADERS} - OPTIONS - -I${CMAKE_CURRENT_SOURCE_DIR}/mfile/include/ - LINKDEF - LinkDef.h) +add_subdirectory(mfile) +add_subdirectory(matop) -add_library(${PROJECT_NAME} SHARED ${SOURCES} G__${PROJECT_NAME}.cxx) -add_library(hdtv::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) +add_library(${PROJECT_NAME} SHARED) -target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_14) -set_target_properties( - ${PROJECT_NAME} - PROPERTIES - RESOURCE - "${CMAKE_CURRENT_BINARY_DIR}/lib${PROJECT_NAME}.rootmap;${CMAKE_CURRENT_BINARY_DIR}/lib${PROJECT_NAME}_rdict.pcm" +set(HEADERS MFileHist.hh MFileRoot.hh MatOp.hh VMatrix.hh) + +target_sources( + ${PROJECT_NAME} + PRIVATE MFileHist.cc MFileRoot.cc MatOp.cc VMatrix.cc + PUBLIC + FILE_SET HEADERS BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} FILES ${HEADERS} ) -target_include_directories( - ${PROJECT_NAME} - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/matop - ${CMAKE_CURRENT_SOURCE_DIR}/mfile/include - ${CMAKE_CURRENT_SOURCE_DIR}/mfile/src) -target_link_libraries(${PROJECT_NAME} ROOT::Core ROOT::Hist) -# For mfile -target_compile_features(${PROJECT_NAME} PRIVATE c_std_99) -target_compile_options(${PROJECT_NAME} PRIVATE -ftrapv -Wall) -# Check endian-ness -include(TestBigEndian) -test_big_endian(BIGENDIAN) -if(NOT ${BIGENDIAN}) - target_compile_definitions(${PROJECT_NAME} PRIVATE -DLOWENDIAN) -endif(NOT ${BIGENDIAN}) +target_link_libraries(${PROJECT_NAME} PRIVATE ROOT::Core ROOT::Hist matop mfile) + +root_generate_dictionary(G__${PROJECT_NAME} ${HEADERS} MODULE ${PROJECT_NAME} LINKDEF LinkDef.h) + +add_library(hdtv::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) + +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_14) -install( - TARGETS ${PROJECT_NAME} - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - RESOURCE DESTINATION lib) +install(TARGETS ${PROJECT_NAME} FILE_SET HEADERS) diff --git a/src/hdtv/rootext/mfile-root/matop/CMakeLists.txt b/src/hdtv/rootext/mfile-root/matop/CMakeLists.txt new file mode 100644 index 00000000..73770e20 --- /dev/null +++ b/src/hdtv/rootext/mfile-root/matop/CMakeLists.txt @@ -0,0 +1,12 @@ +add_library(matop SHARED) +target_sources( + matop + PRIVATE matop_adjust.c matop_conv.c matop_project.c + PUBLIC + FILE_SET HEADERS + BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} + FILES matop_adjust.h matop_conv.h matop.h matop_project.h +) +target_link_libraries(matop PRIVATE mfile) + +install(TARGETS matop FILE_SET HEADERS) diff --git a/src/hdtv/rootext/mfile-root/mfile/CMakeLists.txt b/src/hdtv/rootext/mfile-root/mfile/CMakeLists.txt index d06ebca7..4a6a1e1e 100644 --- a/src/hdtv/rootext/mfile-root/mfile/CMakeLists.txt +++ b/src/hdtv/rootext/mfile-root/mfile/CMakeLists.txt @@ -1,83 +1,118 @@ -cmake_minimum_required(VERSION 3.6 FATAL_ERROR) -project( - mfile - VERSION 1.2 - LANGUAGES C) +cmake_minimum_required(VERSION 3.24) +project(mfile VERSION 1.2 LANGUAGES C) -set(SOURCES - src/callindir.c - src/converters.c - src/disk_access.c - src/getputint.c - src/gf2_getput.c - src/gf2_minfo.c - src/lc_c1.c - src/lc_c2.c - src/lc_getput.c - src/lc_minfo.c - src/maccess.c - src/mate_getput.c - src/mate_minfo.c - src/mat_types.c - src/minfo.c - src/mopen.c - src/oldmat_getput.c - src/oldmat_minfo.c - src/shm_access.c - src/shm_getput.c - src/shm_minfo.c - src/specio.c - src/trixi_getput.c - src/trixi_minfo.c - src/txt_getput.c - src/txt_minfo.c) +add_library(mfile SHARED ${SOURCES}) +add_library(hdtv::mfile ALIAS ${PROJECT_NAME}) -add_library(${PROJECT_NAME} SHARED ${SOURCES}) -add_library(hdtv::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) - -set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER include/mfile.h) - -target_include_directories( - ${PROJECT_NAME} - PUBLIC $ $ - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src) +target_sources( + mfile + PRIVATE + src/callindir.c + src/converters.c + src/disk_access.c + src/getputint.c + src/gf2_getput.c + src/gf2_minfo.c + src/lc_c1.c + src/lc_c2.c + src/lc_getput.c + src/lc_minfo.c + src/maccess.c + src/mate_getput.c + src/mate_minfo.c + src/mat_types.c + src/minfo.c + src/mopen.c + src/oldmat_getput.c + src/oldmat_minfo.c + src/shm_access.c + src/shm_getput.c + src/shm_minfo.c + src/specio.c + src/trixi_getput.c + src/trixi_minfo.c + src/txt_getput.c + src/txt_minfo.c + PRIVATE + FILE_SET privateHeaders + TYPE HEADERS + BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src + FILES + src/callindir.h + src/converters.h + src/debug.h + src/disk_access.h + src/getputint.h + src/gf2_getput.h + src/gf2_minfo.h + src/lc_c1.h + src/lc_c2.h + src/lc_getput.h + src/lc_minfo.h + src/maccess.h + src/mate_getput.h + src/mate_minfo.h + src/mat_types.h + src/mopen.h + src/oldmat_getput.h + src/oldmat_minfo.h + src/shm_access.h + src/shm_getput.h + src/shm_minfo.h + src/sys_config.h + src/sys_endian.h + src/trixi_getput.h + src/trixi_minfo.h + src/txt_getput.h + src/txt_minfo.h + PUBLIC + FILE_SET HEADERS + BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include + FILES include/mfile.h +) target_compile_features(${PROJECT_NAME} PRIVATE c_std_99) -target_compile_options(${PROJECT_NAME} PRIVATE -ftrapv -Wall) + +target_compile_options( + ${PROJECT_NAME} + PRIVATE + -ftrapv + -Wall + -Wno-incompatible-pointer-types + -Wno-old-style-definition +) # Check endian-ness include(TestBigEndian) test_big_endian(BIGENDIAN) if(NOT ${BIGENDIAN}) - target_compile_definitions(${PROJECT_NAME} PRIVATE -DLOWENDIAN) -endif(NOT ${BIGENDIAN}) + target_compile_definitions(${PROJECT_NAME} PRIVATE -DLOWENDIAN) +endif() # Check for snprintf include(CheckFunctionExists) check_function_exists(snprintf HAVE_SNPRINTF) + if(${HAVE_SNPRINTF}) - target_compile_definitions(${PROJECT_NAME} PRIVATE -DHAVE_SNPRINTF) -endif(${HAVE_SNPRINTF}) + target_compile_definitions(${PROJECT_NAME} PRIVATE -DHAVE_SNPRINTF) +endif() # Check for shared memory via sys/shm.h include(CheckIncludeFile) set(HAVE_SHM false) check_include_file("sys/shm.h" HAVE_SHM) if(NOT ${HAVE_SHM}) - target_compile_definitions(${PROJECT_NAME} PRIVATE -DNO_SHM) -endif(NOT ${HAVE_SHM}) + target_compile_definitions(${PROJECT_NAME} PRIVATE -DNO_SHM) +endif() + +install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Config FILE_SET HEADERS) install( - TARGETS ${PROJECT_NAME} - EXPORT ${PROJECT_NAME}Config - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - PUBLIC_HEADER DESTINATION include) -install( - EXPORT ${PROJECT_NAME}Config - FILE ${PROJECT_NAME}Config.cmake - NAMESPACE hdtv:: - DESTINATION share/${PROJECT_NAME}/cmake) + EXPORT ${PROJECT_NAME}Config + FILE ${PROJECT_NAME}Config.cmake + NAMESPACE hdtv:: + DESTINATION share/${PROJECT_NAME}/cmake +) export(TARGETS ${PROJECT_NAME} FILE ${PROJECT_NAME}Config.cmake) # Testing @@ -86,8 +121,4 @@ add_executable(check_mfile test/check_mfile.c) target_link_libraries(check_mfile hdtv::mfile) add_dependencies(check_mfile hdtv::mfile) add_test(run_check_mfile check_mfile) -add_test( - run_check_spectra - md5sum - -c - ${CMAKE_CURRENT_SOURCE_DIR}/test/md5sums) +add_test(run_check_spectra md5sum -c ${CMAKE_CURRENT_SOURCE_DIR}/test/md5sums) diff --git a/src/hdtv/rootext/mfile-root/mfile/include/mfile.h b/src/hdtv/rootext/mfile-root/mfile/include/mfile.h index b55385d1..64297d68 100644 --- a/src/hdtv/rootext/mfile-root/mfile/include/mfile.h +++ b/src/hdtv/rootext/mfile-root/mfile/include/mfile.h @@ -121,8 +121,14 @@ typedef struct minfo { typedef struct accessmethod *amp; +struct matfile; + +typedef int32_t (*muninitf_ptr)(struct matfile *); +typedef int32_t (*func_ptr_int_buffer)(struct matfile *, int32_t *, int32_t, int32_t, int32_t, int32_t); +typedef int32_t (*func_ptr_float_buffer)(struct matfile *, float *, int32_t, int32_t, int32_t, int32_t); +typedef int32_t (*func_ptr_double_buffer)(struct matfile *, double *, int32_t, int32_t, int32_t, int32_t); + typedef struct matfile { - amp ap; char *name; char *comment; int32_t mode; @@ -132,14 +138,23 @@ typedef struct matfile { uint32_t levels; uint32_t lines; uint32_t columns; - int32_t (*mflushf)(); - int32_t (*muninitf)(); - int32_t (*mgeti4f)(); - int32_t (*mgetf4f)(); - int32_t (*mgetf8f)(); - int32_t (*mputi4f)(); - int32_t (*mputf4f)(); - int32_t (*mputf8f)(); + amp ap; + muninitf_ptr mflushf; + muninitf_ptr muninitf; + func_ptr_int_buffer mgeti4f; + func_ptr_float_buffer mgetf4f; + func_ptr_double_buffer mgetf8f; + func_ptr_int_buffer mputi4f; + func_ptr_float_buffer mputf4f; + func_ptr_double_buffer mputf8f; + // int32_t (*mflushf)(); + // int32_t (*muninitf)(); + // int32_t (*mgeti4f)(); + // int32_t (*mgetf4f)(); + // int32_t (*mgetf8f)(); + // int32_t (*mputi4f)(); + // int32_t (*mputf4f)(); + // int32_t (*mputf8f)(); union { void *p; int32_t i; diff --git a/src/hdtv/rootext/mfile-root/mfile/src/callindir.c b/src/hdtv/rootext/mfile-root/mfile/src/callindir.c index 58e0b791..cdc4cbae 100644 --- a/src/hdtv/rootext/mfile-root/mfile/src/callindir.c +++ b/src/hdtv/rootext/mfile-root/mfile/src/callindir.c @@ -36,9 +36,11 @@ (mat && buffer && (uint32_t)level < mat->levels && (uint32_t)line < mat->lines && (uint32_t)col < mat->columns && \ (uint32_t)num <= mat->columns && (uint32_t)(col + num) <= mat->columns) +// typedef int32_t func_pointer(MFILE *, int32_t *, int32_t, int32_t, int32_t, int32_t); + int32_t mgetint(MFILE *mat, int32_t *buffer, int32_t level, int32_t line, int32_t col, int32_t num) { - int32_t (*f)(); + func_ptr_int_buffer f; /* sanity checks */ if (paramok(mat, buffer, level, line, col, num)) { @@ -56,7 +58,7 @@ int32_t mgetint(MFILE *mat, int32_t *buffer, int32_t level, int32_t line, int32_ int32_t mputint(MFILE *mat, int32_t *buffer, int32_t level, int32_t line, int32_t col, int32_t num) { - int32_t (*f)(); + func_ptr_int_buffer f; /* sanity checks */ if (paramok(mat, buffer, level, line, col, num)) { @@ -80,7 +82,7 @@ int32_t mputint(MFILE *mat, int32_t *buffer, int32_t level, int32_t line, int32_ int32_t mgetflt(MFILE *mat, float *buffer, int32_t level, int32_t line, int32_t col, int32_t num) { - int32_t (*f)(); + func_ptr_float_buffer f; /* sanity checks */ if (paramok(mat, buffer, level, line, col, num)) { @@ -98,7 +100,7 @@ int32_t mgetflt(MFILE *mat, float *buffer, int32_t level, int32_t line, int32_t int32_t mputflt(MFILE *mat, float *buffer, int32_t level, int32_t line, int32_t col, int32_t num) { - int32_t (*f)(); + func_ptr_float_buffer f; /* sanity checks */ if (paramok(mat, buffer, level, line, col, num)) { @@ -122,7 +124,7 @@ int32_t mputflt(MFILE *mat, float *buffer, int32_t level, int32_t line, int32_t int32_t mgetdbl(MFILE *mat, double *buffer, int32_t level, int32_t line, int32_t col, int32_t num) { - int32_t (*f)(); + func_ptr_double_buffer f; /* sanity checks */ if (paramok(mat, buffer, level, line, col, num)) { @@ -140,7 +142,7 @@ int32_t mgetdbl(MFILE *mat, double *buffer, int32_t level, int32_t line, int32_t int32_t mputdbl(MFILE *mat, double *buffer, int32_t level, int32_t line, int32_t col, int32_t num) { - int32_t (*f)(); + func_ptr_double_buffer f; /* sanity checks */ if (paramok(mat, buffer, level, line, col, num)) { diff --git a/src/hdtv/rootext/mfile-root/mfile/src/gf2_minfo.c b/src/hdtv/rootext/mfile-root/mfile/src/gf2_minfo.c index 32c2ccb8..88d2ca1e 100644 --- a/src/hdtv/rootext/mfile-root/mfile/src/gf2_minfo.c +++ b/src/hdtv/rootext/mfile-root/mfile/src/gf2_minfo.c @@ -91,8 +91,8 @@ void gf2_init(MFILE *mat) { mat->specinfo.i = elemsize; mat->version = GF2_STD_VERSION; - mat->mgetf4f = getfLocal; - mat->mputf4f = putfLocal; + mat->mgetf4f = (func_ptr_float_buffer)getfLocal; + mat->mputf4f = (func_ptr_float_buffer)putfLocal; mat->muninitf = gf2_uninit; } } diff --git a/src/hdtv/rootext/mfile-root/mfile/src/lc_getput.c b/src/hdtv/rootext/mfile-root/mfile/src/lc_getput.c index a4c69062..38350e3d 100644 --- a/src/hdtv/rootext/mfile-root/mfile/src/lc_getput.c +++ b/src/hdtv/rootext/mfile-root/mfile/src/lc_getput.c @@ -86,8 +86,11 @@ static int32_t readline(MFILE *mat, int32_t *buffer, uint32_t line) { lci->cachedcomprline = line; } } + + typedef int32_t (*func_ptr)(int32_t *, void *, uint32_t); + if (lci->cachedcomprline == line) { - return lci->uncomprf(buffer, lci->comprlinebuf, mat->columns); + return ((func_ptr)lci->uncomprf)(buffer, lci->comprlinebuf, mat->columns); } return -1; @@ -103,8 +106,10 @@ static int32_t writeline(MFILE *mat, int32_t *buffer, uint32_t line) { uint32_t p = poslentable[line].pos; uint32_t l = poslentable[line].len; + typedef int32_t (*func_ptr)(int32_t *, void *, uint32_t); + uint32_t fp = lci->freepos; - uint32_t nl = lci->comprf(lci->comprlinebuf, buffer, mat->columns); + uint32_t nl = ((func_ptr)lci->comprf)(lci->comprlinebuf, buffer, mat->columns); #ifdef VERIFY_COMPRESSION verifycompr(lci, buffer, mat->columns); #endif