diff --git a/CMakeLists.txt b/CMakeLists.txt index e677330..3820d9a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -145,6 +145,7 @@ set(TEST_SRC_FILES # meta data set(META_PROJECT_NAME tagparser) +set(META_PROJECT_VARNAME TAG_PARSER) set(META_APP_NAME "Tag Parser") set(META_APP_AUTHOR "Martchus") set(META_APP_URL "https://github.com/${META_APP_AUTHOR}/${META_PROJECT_NAME}") @@ -153,145 +154,17 @@ set(META_VERSION_MAJOR 5) set(META_VERSION_MINOR 0) set(META_VERSION_PATCH 0) -# stringification of meta data -set(META_PROJECT_NAME_STR "\"${META_PROJECT_NAME}\"") -set(META_APP_NAME_STR "\"${META_APP_NAME}\"") -set(META_APP_AUTHOR_STR "\"${META_APP_AUTHOR}\"") -set(META_APP_URL_STR "\"${META_APP_URL}\"") -set(META_APP_DESCRIPTION_STR "\"${META_APP_DESCRIPTION}\"") -set(META_APP_VERSION ${META_VERSION_MAJOR}.${META_VERSION_MINOR}.${META_VERSION_PATCH}) -set(META_APP_VERSION_STR "\"${META_APP_VERSION}\"") +# find c++utilities +find_package(c++utilities REQUIRED) +use_cpp_utilities() -# define project -project(${META_PROJECT_NAME}) +# find zlib +find_package(ZLIB REQUIRED) +include_directories(${ZLIB_INCLUDE_DIRS}) +list(APPEND LIBRARIES ${ZLIB_LIBRARIES}) -# add configuration header -configure_file( - "${PROJECT_SOURCE_DIR}/resources/config.h.in" - "${PROJECT_BINARY_DIR}/resources/config.h" -) -include_directories("${PROJECT_BINARY_DIR}") - -# add windows resource file -if(MINGW) - # create windows rc file from template - set(WINDOWS_EXT "dll") - configure_file( - "${PROJECT_SOURCE_DIR}/resources/windows.rc.in" - "${PROJECT_BINARY_DIR}/resources/windows.rc" - ) - # set windres as resource compiler - set(RES_FILES "${PROJECT_BINARY_DIR}/resources/windows.rc") - set(CMAKE_RC_COMPILER_INIT windres) - set(CMAKE_RC_COMPILE_OBJECT " -O coff -i -o ") - enable_language(RC) -endif(MINGW) - -# remove library prefix when building with mingw-w64 (just for consistancy with qmake) -if(MINGW) - set(CMAKE_SHARED_LIBRARY_PREFIX "") -endif(MINGW) - -# disable new ABI (can't catch ios_base::failure with new ABI) -add_definitions( - -D_GLIBCXX_USE_CXX11_ABI=0 -) - -# add check target -if(NOT TARGET check) - set(CMAKE_CTEST_COMMAND ctest -V) - add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) - enable_testing() -endif() -add_executable(${META_PROJECT_NAME}_tests EXCLUDE_FROM_ALL ${TEST_HEADER_FILES} ${TEST_SRC_FILES}) -target_link_libraries(${META_PROJECT_NAME}_tests ${META_PROJECT_NAME} c++utilities cppunit) -set_target_properties(${META_PROJECT_NAME}_tests PROPERTIES CXX_STANDARD 11) -add_test(NAME ${META_PROJECT_NAME}_cppunit COMMAND ${META_PROJECT_NAME}_tests -p "${CMAKE_CURRENT_SOURCE_DIR}/testfiles") -add_dependencies(check ${META_PROJECT_NAME}_tests) - -# executable and linking -add_library(${META_PROJECT_NAME} SHARED ${HEADER_FILES} ${SRC_FILES} ${RES_FILES} ${WINDOWS_ICON_PATH}) -target_link_libraries(${META_PROJECT_NAME} c++utilities z) -set_target_properties(${META_PROJECT_NAME} PROPERTIES - VERSION ${META_VERSION_MAJOR}.${META_VERSION_MINOR}.${META_VERSION_PATCH} - SOVERSION ${META_VERSION_MAJOR} - CXX_STANDARD 11 -) -if(MINGW) - # enable static library when building with mingw-w64 - add_library(${META_PROJECT_NAME}_static STATIC ${HEADER_FILES} ${SRC_FILES} ${RES_FILES} ${WINDOWS_ICON_PATH}) - set_target_properties(${META_PROJECT_NAME}_static PROPERTIES - VERSION ${META_VERSION_MAJOR}.${META_VERSION_MINOR}.${META_VERSION_PATCH} - SOVERSION ${META_VERSION_MAJOR} - OUTPUT_NAME ${META_PROJECT_NAME} - CXX_STANDARD 11 - ) -endif(MINGW) - -# add install target -if(MINGW) - install(TARGETS ${META_PROJECT_NAME}_static - RUNTIME DESTINATION bin - COMPONENT binary - LIBRARY DESTINATION lib - COMPONENT binary - ARCHIVE DESTINATION lib - COMPONENT binary - ) -endif(MINGW) -install(TARGETS ${META_PROJECT_NAME} - RUNTIME DESTINATION bin - COMPONENT binary - LIBRARY DESTINATION lib - COMPONENT binary - ARCHIVE DESTINATION lib - COMPONENT binary -) -foreach(HEADER_FILE ${HEADER_FILES}) - get_filename_component(HEADER_DIR ${HEADER_FILE} DIRECTORY) - install( - FILES ${HEADER_FILE} - DESTINATION include/${META_PROJECT_NAME}/${HEADER_DIR} - COMPONENT header - ) -endforeach() -if(NOT TARGET install-binary) - add_custom_target(install-binary - DEPENDS ${META_PROJECT_NAME} - COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=binary -P "${CMAKE_BINARY_DIR}/cmake_install.cmake" - ) -endif() -if(NOT TARGET install-header) - add_custom_target(install-header - DEPENDS ${META_PROJECT_NAME} - COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=header -P "${CMAKE_BINARY_DIR}/cmake_install.cmake" - ) -endif() -if(NOT TARGET install-mingw-w64) - add_custom_target(install-mingw-w64 - DEPENDS install-binary install-header - ) -endif() -if(NOT TARGET install-binary-strip) - add_custom_target(install-binary-strip - DEPENDS ${META_PROJECT_NAME} - COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_DO_STRIP=1 -DCMAKE_INSTALL_COMPONENT=binary -P "${CMAKE_BINARY_DIR}/cmake_install.cmake" - ) -endif() -if(NOT TARGET install-mingw-w64-importlib-strip) - add_custom_target(install-mingw-w64-importlib-strip - DEPENDS install-binary-strip - COMMAND "${CMAKE_FIND_ROOT_PATH}/bin/strip" --strip-unneeded "${CMAKE_INSTALL_PREFIX}/lib/lib${META_PROJECT_NAME}.dll.a" - ) -endif() -if(NOT TARGET install-mingw-w64-staticlib-strip) - add_custom_target(install-mingw-w64-staticlib-strip - DEPENDS install-binary-strip - COMMAND "${CMAKE_FIND_ROOT_PATH}/bin/strip" -g "${CMAKE_INSTALL_PREFIX}/lib/lib${META_PROJECT_NAME}.a" - ) -endif() -if(NOT TARGET install-mingw-w64-strip) - add_custom_target(install-mingw-w64-strip - DEPENDS install-binary-strip install-mingw-w64-importlib-strip install-mingw-w64-staticlib-strip install-header - ) -endif() +# include modules to apply configuration +include(BasicConfig) +include(WindowsResources) +include(LibraryTarget) +include(TestTarget) diff --git a/general.pri b/general.pri deleted file mode 100644 index f417d7d..0000000 --- a/general.pri +++ /dev/null @@ -1,103 +0,0 @@ -# specify build directories for moc, object and rcc files -MOC_DIR = ./moc -OBJECTS_DIR = ./obj -RCC_DIR = ./res - -# compiler flags: enable C++11 -QMAKE_CXXFLAGS += -std=c++11 -QMAKE_LFLAGS += -std=c++11 - -# disable new ABI (can't catch ios_base::failure with new ABI) -DEFINES += _GLIBCXX_USE_CXX11_ABI=0 - -# variables to check target architecture -win32-g++:QMAKE_TARGET.arch = $$QMAKE_HOST.arch -win32-g++-32:QMAKE_TARGET.arch = x86 -win32-g++-64:QMAKE_TARGET.arch = x86_64 -linux-g++:QMAKE_TARGET.arch = $$QMAKE_HOST.arch -linux-g++-32:QMAKE_TARGET.arch = x86 -linux-g++-64:QMAKE_TARGET.arch = x86_64 - -# determine and print target prefix -targetprefix = $$(TARGET_PREFIX) -message("Using target prefix \"$${targetprefix}\".") - -# print install root -message("Using install root \"$$(INSTALL_ROOT)\".") - -# set target -CONFIG(debug, debug|release) { - TARGET = $${targetprefix}$${projectname}d -} else { - TARGET = $${targetprefix}$${projectname} -} - -# add defines for meta data -DEFINES += "APP_METADATA_AVAIL" -DEFINES += "'PROJECT_NAME=\"$${projectname}\"'" -DEFINES += "'APP_NAME=\"$${appname}\"'" -DEFINES += "'APP_AUTHOR=\"$${appauthor}\"'" -DEFINES += "'APP_URL=\"$${appurl}\"'" -DEFINES += "'APP_VERSION=\"$${VERSION}\"'" - -# configure Qt modules and defines -mobile { - DEFINES += CONFIG_MOBILE -} else:desktop { - DEFINES += CONFIG_DESKTOP -} else:android { - CONFIG += mobile - DEFINES += CONFIG_MOBILE -} else { - CONFIG += desktop - DEFINES += CONFIG_DESKTOP -} -no-gui { - QT -= gui - DEFINES += GUI_NONE - guiqtquick || guiqtwidgets { - error("Can not use no-gui with guiqtquick or guiqtwidgets.") - } else { - message("Configured for no GUI support.") - } -} else { - QT += gui - mobile { - CONFIG += guiqtquick - } - desktop { - CONFIG += guiqtwidgets - } -} -guiqtquick { - message("Configured for Qt Quick GUI support.") - QT += quick - CONFIG(debug, debug|release) { - CONFIG += qml_debug - } - DEFINES += GUI_QTQUICK -} -guiqtwidgets { - message("Configured for Qt widgets GUI support.") - QT += widgets - DEFINES += GUI_QTWIDGETS - DEFINES += MODEL_UNDO_SUPPORT -} - -# configuration for cross compliation with mingw-w64 -win32 { - QMAKE_TARGET_PRODUCT = "$${appname}" - QMAKE_TARGET_COPYRIGHT = "by $${appauthor}" -} -mingw-w64-manualstrip-dll { - QMAKE_POST_LINK=$${CROSS_COMPILE}strip --strip-unneeded ./release/$(TARGET); \ - $${CROSS_COMPILE}strip --strip-unneeded ./release/lib$(TARGET).a -} -mingw-w64-manualstrip-exe { - QMAKE_POST_LINK=$${CROSS_COMPILE}strip --strip-unneeded ./release/$(TARGET) -} -mingw-w64-noversion { - TARGET_EXT = ".dll" - TARGET_VERSION_EXT = "" - CONFIG += skip_target_version_ext -} diff --git a/resources/config.h.in b/resources/config.h.in deleted file mode 100644 index 2f9ca46..0000000 --- a/resources/config.h.in +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef APP_METADATA_AVAIL -#define APP_METADATA_AVAIL -#define PROJECT_NAME @META_PROJECT_NAME_STR@ -#define APP_NAME @META_APP_NAME_STR@ -#define APP_VERSION @META_APP_VERSION_STR@ -#define APP_AUTHOR @META_APP_AUTHOR_STR@ -#define APP_URL @META_APP_URL_STR@ -#define APP_DESCRIPTION @META_APP_DESCRIPTION_STR@ -#endif // APP_METADATA_AVAIL diff --git a/resources/windows.rc.in b/resources/windows.rc.in deleted file mode 100644 index 82b5923..0000000 --- a/resources/windows.rc.in +++ /dev/null @@ -1,40 +0,0 @@ -# if defined(UNDER_CE) -# include -# else -# include -# endif - -@WINDOWS_ICON_RC_ENTRY@ - -VS_VERSION_INFO VERSIONINFO - FILEVERSION @META_VERSION_MAJOR@,@META_VERSION_MINOR@,@META_VERSION_PATCH@,0 - PRODUCTVERSION @META_VERSION_MAJOR@,@META_VERSION_MINOR@,@META_VERSION_PATCH@,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG -#else - FILEFLAGS 0x0L -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE 0x0L - BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "@META_APP_AUTHOR@\0" - VALUE "FileDescription", "@META_APP_DESCRIPTION@\0" - VALUE "FileVersion", "@META_APP_VERSION@\0" - VALUE "LegalCopyright", "by @META_APP_AUTHOR@\0" - VALUE "OriginalFilename", "@META_PROJECT_NAME@.@WINDOWS_EXT@\0" - VALUE "ProductName", "@META_APP_NAME@\0" - VALUE "ProductVersion", "@META_APP_VERSION@\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0409, 1200 - END - END -/* End of Version info */ diff --git a/tagparser.pro b/tagparser.pro deleted file mode 100644 index 487d8f5..0000000 --- a/tagparser.pro +++ /dev/null @@ -1,201 +0,0 @@ -# meta data -projectname = tagparser -appname = "Tag Parser" -appauthor = Martchus -appurl = "https://github.com/$${appauthor}/$${projectname}" -QMAKE_TARGET_DESCRIPTION = "C++ library for reading and writing MP4 (iTunes), ID3, Vorbis and Matroska tags." -VERSION = 5.0.0 - -# include ../../common.pri when building as part of a subdirs project; otherwise include general.pri -!include(../../common.pri) { - !include(./general.pri) { - error("Couldn't find the common.pri or the general.pri file!") - } -} - -# basic configuration: shared library, no Qt -TEMPLATE = lib -CONFIG -= qt -CONFIG += shared - -# add defines for configuration -underconstruction { - DEFINES += UNDER_CONSTRUCTION -} -forcefullparsedefault { - DEFINES += FORCE_FULL_PARSE_DEFAULT -} - -# add project files -HEADERS += \ - abstractcontainer.h \ - abstracttrack.h \ - aspectratio.h \ - avc/avcinfo.h \ - avc/avcconfiguration.h \ - backuphelper.h \ - basicfileinfo.h \ - exceptions.h \ - fieldbasedtag.h \ - genericcontainer.h \ - genericfileelement.h \ - id3/id3genres.h \ - id3/id3v1tag.h \ - id3/id3v2frame.h \ - id3/id3v2frameids.h \ - id3/id3v2tag.h \ - margin.h \ - matroska/ebmlelement.h \ - matroska/ebmlid.h \ - matroska/matroskacontainer.h \ - matroska/matroskaid.h \ - matroska/matroskatag.h \ - matroska/matroskatagfield.h \ - matroska/matroskatagid.h \ - matroska/matroskatrack.h \ - matroska/matroskaseekinfo.h \ - matroska/matroskacues.h \ - matroskaid.h \ - mediafileinfo.h \ - mp4/mp4atom.h \ - mp4/mp4container.h \ - mp4/mp4ids.h \ - mp4/mp4tag.h \ - mp4/mp4tagfield.h \ - mp4/mp4track.h \ - mpegaudio/mpegaudioframe.h \ - mpegaudio/mpegaudioframestream.h \ - notification.h \ - positioninset.h \ - signature.h \ - size.h \ - statusprovider.h \ - tag.h \ - tagtarget.h \ - tagvalue.h \ - wav/waveaudiostream.h \ - ogg/oggpage.h \ - vorbis/vorbiscomment.h \ - vorbis/vorbiscommentfield.h \ - ogg/oggstream.h \ - ogg/oggcontainer.h \ - vorbis/vorbispackagetypes.h \ - vorbis/vorbisidentificationheader.h \ - opus/opusidentificationheader.h \ - ogg/oggiterator.h \ - vorbis/vorbiscommentids.h \ - abstractchapter.h \ - matroska/matroskaeditionentry.h \ - matroska/matroskachapter.h \ - localeawarestring.h \ - abstractattachment.h \ - matroska/matroskaattachment.h \ - mediaformat.h \ - generictagfield.h \ - mp4/mpeg4descriptor.h \ - avi/bitmapinfoheader.h \ - adts/adtsframe.h \ - adts/adtsstream.h \ - caseinsensitivecomparer.h - -SOURCES += \ - abstractcontainer.cpp \ - abstracttrack.cpp \ - aspectratio.cpp \ - avc/avcinfo.cpp \ - avc/avcconfiguration.cpp \ - backuphelper.cpp \ - basicfileinfo.cpp \ - exceptions.cpp \ - id3/id3genres.cpp \ - id3/id3v1tag.cpp \ - id3/id3v2frame.cpp \ - id3/id3v2frameids.cpp \ - id3/id3v2tag.cpp \ - matroska/ebmlelement.cpp \ - matroska/matroskacontainer.cpp \ - matroska/matroskaid.cpp \ - matroska/matroskatag.cpp \ - matroska/matroskatagfield.cpp \ - matroska/matroskatagid.cpp \ - matroska/matroskatrack.cpp \ - matroska/matroskaseekinfo.cpp \ - matroska/matroskacues.cpp \ - mediafileinfo.cpp \ - mp4/mp4atom.cpp \ - mp4/mp4container.cpp \ - mp4/mp4ids.cpp \ - mp4/mp4tag.cpp \ - mp4/mp4tagfield.cpp \ - mp4/mp4track.cpp \ - mpegaudio/mpegaudioframe.cpp \ - mpegaudio/mpegaudioframestream.cpp \ - notification.cpp \ - signature.cpp \ - statusprovider.cpp \ - tag.cpp \ - tagtarget.cpp \ - tagvalue.cpp \ - wav/waveaudiostream.cpp \ - ogg/oggpage.cpp \ - vorbis/vorbiscomment.cpp \ - vorbis/vorbiscommentfield.cpp \ - ogg/oggstream.cpp \ - ogg/oggcontainer.cpp \ - vorbis/vorbisidentificationheader.cpp \ - opus/opusidentificationheader.cpp \ - ogg/oggiterator.cpp \ - abstractchapter.cpp \ - matroska/matroskaeditionentry.cpp \ - matroska/matroskachapter.cpp \ - abstractattachment.cpp \ - matroska/matroskaattachment.cpp \ - mediaformat.cpp \ - mp4/mpeg4descriptor.cpp \ - avi/bitmapinfoheader.cpp \ - adts/adtsframe.cpp \ - adts/adtsstream.cpp - -underconstruction { - HEADERS += \ - aac/aacframe.h \ - aac/aaccodebook.h - - SOURCES += \ - aac/aacframe.cpp \ - aac/aaccodebook.cpp -} - -OTHER_FILES += \ - README.md \ - LICENSE \ - CMakeLists.txt \ - resources/config.h.in \ - resources/windows.rc.in - -# add libs -CONFIG(debug, debug|release) { - LIBS += -lc++utilitiesd -} else { - LIBS += -lc++utilities -} -LIBS += -lz - -# installs -mingw-w64-install { - target.path = $$(INSTALL_ROOT) - target.extra = install -m755 -D $${OUT_PWD}/release/lib$(TARGET).a $$(INSTALL_ROOT)/lib/lib$(TARGET).a - INSTALLS += target - dlltarget.path = $$(INSTALL_ROOT) - dlltarget.extra = install -m755 -D $${OUT_PWD}/release/$(TARGET) $$(INSTALL_ROOT)/bin/$(TARGET) - INSTALLS += dlltarget -} else { - target.path = $$(INSTALL_ROOT)/lib - INSTALLS += target -} -for(dir, $$list(./ avc adts id3 matroska mp4 mpegaudio ogg vorbis wav avi)) { - eval(inc_$${dir} = $${dir}) - inc_$${dir}.path = $$(INSTALL_ROOT)/include/$$projectname/$${dir} - inc_$${dir}.files = $${dir}/*.h - INSTALLS += inc_$${dir} -}