diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index f97eb774..dd7d3d04 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -21,4 +21,7 @@ target_link_libraries(bmxtimecode PRIVATE bmx ) +include("${PROJECT_SOURCE_DIR}/cmake/source_filename.cmake") +set_source_filename(bmxtimecode "${CMAKE_CURRENT_LIST_DIR}" "bmx") + install(TARGETS bmxtimecode DESTINATION bin) diff --git a/apps/bmxparse/CMakeLists.txt b/apps/bmxparse/CMakeLists.txt index 40d68a8e..7f52005d 100644 --- a/apps/bmxparse/CMakeLists.txt +++ b/apps/bmxparse/CMakeLists.txt @@ -13,4 +13,7 @@ target_link_libraries(bmxparse PRIVATE bmx ) +include("${PROJECT_SOURCE_DIR}/cmake/source_filename.cmake") +set_source_filename(bmxparse "${CMAKE_CURRENT_LIST_DIR}" "bmx") + install(TARGETS bmxparse DESTINATION bin) diff --git a/apps/bmxtranswrap/CMakeLists.txt b/apps/bmxtranswrap/CMakeLists.txt index 586f0b50..7237c9ba 100644 --- a/apps/bmxtranswrap/CMakeLists.txt +++ b/apps/bmxtranswrap/CMakeLists.txt @@ -14,4 +14,7 @@ target_link_libraries(bmxtranswrap PRIVATE bmx_app_writers ) +include("${PROJECT_SOURCE_DIR}/cmake/source_filename.cmake") +set_source_filename(bmxtranswrap "${CMAKE_CURRENT_LIST_DIR}" "bmx") + install(TARGETS bmxtranswrap DESTINATION bin) diff --git a/apps/mxf2raw/CMakeLists.txt b/apps/mxf2raw/CMakeLists.txt index 5bdbe2b3..a04e5654 100644 --- a/apps/mxf2raw/CMakeLists.txt +++ b/apps/mxf2raw/CMakeLists.txt @@ -18,4 +18,7 @@ target_link_libraries(mxf2raw PRIVATE bmx ) +include("${PROJECT_SOURCE_DIR}/cmake/source_filename.cmake") +set_source_filename(mxf2raw "${CMAKE_CURRENT_LIST_DIR}" "bmx") + install(TARGETS mxf2raw DESTINATION bin) diff --git a/apps/raw2bmx/CMakeLists.txt b/apps/raw2bmx/CMakeLists.txt index a9aa4023..c6c63dcf 100644 --- a/apps/raw2bmx/CMakeLists.txt +++ b/apps/raw2bmx/CMakeLists.txt @@ -14,4 +14,7 @@ target_link_libraries(raw2bmx PRIVATE bmx_app_writers ) +include("${PROJECT_SOURCE_DIR}/cmake/source_filename.cmake") +set_source_filename(raw2bmx "${CMAKE_CURRENT_LIST_DIR}" "bmx") + install(TARGETS raw2bmx DESTINATION bin) diff --git a/apps/writers/CMakeLists.txt b/apps/writers/CMakeLists.txt index 84648cc8..f7f1c782 100644 --- a/apps/writers/CMakeLists.txt +++ b/apps/writers/CMakeLists.txt @@ -14,3 +14,6 @@ target_compile_definitions(bmx_app_writers PRIVATE target_link_libraries(bmx_app_writers PUBLIC bmx ) + +include("${PROJECT_SOURCE_DIR}/cmake/source_filename.cmake") +set_source_filename(bmx_app_writers "${CMAKE_CURRENT_LIST_DIR}" "bmx") diff --git a/cmake/source_filename.cmake b/cmake/source_filename.cmake new file mode 100644 index 00000000..7878ae44 --- /dev/null +++ b/cmake/source_filename.cmake @@ -0,0 +1,12 @@ +# Adds the __FILENAME__=filename compile definition. +# Based on https://stackoverflow.com/a/27990434, but changed to define __FILENAME__ to be a relative project path +function(set_source_filename target sources_base_dir project_dirname) + get_target_property(source_files "${target}" SOURCES) + foreach(source_file ${source_files}) + file(RELATIVE_PATH rel_path ${PROJECT_SOURCE_DIR} "${sources_base_dir}/${source_file}") + file(TO_NATIVE_PATH "${project_dirname}/${rel_path}" filename) + set_property( + SOURCE "${source_file}" APPEND + PROPERTY COMPILE_DEFINITIONS "__FILENAME__=\"${filename}\"") + endforeach() +endfunction() diff --git a/include/bmx/BMXException.h b/include/bmx/BMXException.h index 568d712b..e6ec14e0 100644 --- a/include/bmx/BMXException.h +++ b/include/bmx/BMXException.h @@ -38,11 +38,11 @@ #include -#define BMX_EXCEPTION(err) \ - do { \ - bmx::log_error_nl err; \ - bmx::log_error(" near %s:%d\n", __FILE__, __LINE__); \ - throw BMXException err; \ +#define BMX_EXCEPTION(err) \ + do { \ + bmx::log_error_nl err; \ + bmx::log_error(" near %s:%d\n", __FILENAME__, __LINE__); \ + throw BMXException err; \ } while (0) #define BMX_CHECK(cond) \ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 45ab6c0f..d5c9306e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -86,6 +86,9 @@ set_target_properties(bmx PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} ) +include("${PROJECT_SOURCE_DIR}/cmake/source_filename.cmake") +set_source_filename(bmx "${CMAKE_CURRENT_LIST_DIR}" "bmx") + install(TARGETS bmx ARCHIVE DESTINATION lib LIBRARY DESTINATION lib diff --git a/src/mxf_reader/MXFFileReader.cpp b/src/mxf_reader/MXFFileReader.cpp index 99a4eb33..e34479dd 100644 --- a/src/mxf_reader/MXFFileReader.cpp +++ b/src/mxf_reader/MXFFileReader.cpp @@ -100,7 +100,7 @@ static const char *RESULT_STRINGS[] = #define THROW_RESULT(result) \ do { \ - log_warn("Open error '%s' near %s:%d\n", #result, __FILE__, __LINE__); \ + log_warn("Open error '%s' near %s:%d\n", #result, __FILENAME__, __LINE__); \ throw result; \ } while (0) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 93eca507..bb7b5ea4 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -2,10 +2,15 @@ add_executable(create_test_essence create_test_essence.cpp ) +include("${PROJECT_SOURCE_DIR}/cmake/source_filename.cmake") +set_source_filename(create_test_essence "${CMAKE_CURRENT_LIST_DIR}" "bmx") + add_executable(file_truncate file_truncate.cpp ) +set_source_filename(file_truncate "${CMAKE_CURRENT_LIST_DIR}" "bmx") + add_subdirectory(ard_zdf_hdf) add_subdirectory(as02) add_subdirectory(as10) diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 95b19b5c..fd65a5fe 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -12,5 +12,9 @@ foreach(tool_source ${tool_sources}) add_executable(${tool_target} ${tool_source} ) + + include("${PROJECT_SOURCE_DIR}/cmake/source_filename.cmake") + set_source_filename(${tool_target} "${CMAKE_CURRENT_LIST_DIR}" "bmx") + install(TARGETS ${tool_target} DESTINATION bin) endforeach()