From 6a7c4936e11d6053daea5d80cbc89a28c3893eb0 Mon Sep 17 00:00:00 2001
From: Elliu <elliu@hashi.re>
Date: Thu, 15 Feb 2024 01:12:40 +0900
Subject: [PATCH] BUILD: misc cmake changes

---
 CMakeLists.txt                       |  69 +++++++++---
 PreCompiledHeaders.cmake             | 152 ---------------------------
 src/UI/DocumentViews/MpvContainer.cc |   2 -
 utils/scripts/count-lines.sh         |   5 +
 4 files changed, 58 insertions(+), 170 deletions(-)
 delete mode 100644 PreCompiledHeaders.cmake
 create mode 100755 utils/scripts/count-lines.sh

diff --git a/CMakeLists.txt b/CMakeLists.txt
index f2b4bdf3..08e07772 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,35 +1,41 @@
 cmake_minimum_required(VERSION 3.17)
 
-# Alpho Vivy, CXX only
+# Alpha Vivy, CXX only
 project(Vivy VERSION 0.1 LANGUAGES CXX)
 cmake_policy(SET CMP0100 NEW) # Let cmake use moc and uic for .hh files
 cmake_policy(SET CMP0009 NEW) # Do not follow symlinks with GLOB_RECURSE
 
+if(CMAKE_BUILD_TYPE STREQUAL "Release")
+    set(CMAKE_BUILD_TYPE RelWithDebInfo)
+endif()
+message(STATUS "The installation prefix is ${CMAKE_INSTALL_PREFIX}")
+message(STATUS "The build type is ${CMAKE_BUILD_TYPE}")
+
 # Don't forget for specific things
 if(WIN32)
     message(STATUS "You are building on windows, pay attenion to the dependencies")
 endif()
 if(MSVC OR MSYS OR MINGW)
     message(STATUS "You are building with a windows compiler")
-endif()
-if(APPLE)
+elseif(APPLE)
     message(STATUS "You are building on MacOS X")
-endif()
-if(UNIX AND NOT APPLE)
+elseif(UNIX AND NOT APPLE)
     message(STATUS "You are building on Linux, FreeBSD or any other toaster OS")
+else()
+    message(FATAL_ERROR "The OS is not recognized")
 endif()
 
-# Pass -fPIC
-set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+set(CMAKE_POSITION_INDEPENDENT_CODE ON) # Pass -fPIC
+set(CMAKE_COLOR_MAKEFILE            ON)
+set(CMAKE_COLOR_DIAGNOSTICS         ON)
+set(CMAKE_EXPORT_COMPILE_COMMANDS   ON)
+set(THREADS_PREFER_PTHREAD_FLAG     ON) # Pthread ftw
 
 # For Qt
 set(CMAKE_AUTOUIC ON)
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTORCC ON)
 
-# Pthread ftw
-set(THREADS_PREFER_PTHREAD_FLAG ON)
-
 # Find Qt dependencies
 find_package(Qt6 REQUIRED COMPONENTS
     Widgets
@@ -59,6 +65,12 @@ qt_add_executable(Vivy
     ${PROJECT_SOURCES}
     rsc/VivyRessources.qrc
 )
+qt_set_finalizer_mode(Vivy ENABLE MODES static_plugins)
+
+set(Vivy_PRECOMPILED_INC PRIVATE src/PreCompiledHeaders.hh)
+
+set_property(TARGET Vivy PROPERTY CXX_STANDARD 20)
+set_property(TARGET Vivy PROPERTY AUTOSTATICPLUGINS ON)
 
 # Link dependencies to Vivy
 target_link_libraries(Vivy PRIVATE
@@ -74,7 +86,6 @@ target_link_libraries(Vivy PRIVATE ${MPV_LIBRARY})
 target_link_libraries(Vivy PRIVATE OpenMP::OpenMP_CXX)
 
 # Headers related things
-include("${CMAKE_CURRENT_SOURCE_DIR}/PreCompiledHeaders.cmake")
 target_include_directories(Vivy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
 target_precompile_headers(Vivy PRIVATE ${Vivy_PRECOMPILED_INC})
 
@@ -117,6 +128,7 @@ target_compile_options(Vivy PRIVATE
 
 # Prepare for Qt6
 target_compile_definitions(Vivy PRIVATE
+    MPV_ENABLE_DEPRECATED=0
     QT_DISABLE_DEPRECATED_BEFORE=0x050F00
     QT_NO_CAST_TO_ASCII
     QT_RESTRICTED_CAST_FROM_ASCII
@@ -128,13 +140,15 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
     target_compile_options(Vivy PRIVATE
         -Weverything
 
-        # Disable some things because we want C++20 and don't control some Qt
-        # generated files...
+        # Disable some things because we want C++20 and don't control some Qt generated files...
         -Wno-c++98-compat
         -Wno-c++98-compat-pedantic
         -Wno-c++98-c++11-c++14-c++17-compat-pedantic
         -Wno-c++20-compat
 
+        # Different versions of MPV...
+        -Wno-switch-enum
+
         -Wno-reserved-identifier
         -Wno-extra-semi-stmt
         -Wno-redundant-parens
@@ -144,7 +158,12 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
     )
     if (${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 16)
         target_compile_options(Vivy PRIVATE
-            -Wno-unsafe-buffer-usage
+            # Different versions of MPV...
+            -Wno-switch
+
+            # Kubat: Some proglems here, it seems they occure because of the usage of "using" for type
+            # aliasing... As I won't get ride of the "using"s the warning is disabled
+            -Wno-subobject-linkage
         )
     endif()
 elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
@@ -157,7 +176,7 @@ elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
 endif()
 
 set_target_properties(Vivy PROPERTIES
-    MACOSX_BUNDLE_GUI_IDENTIFIER vivy.iiens.net
+    MACOSX_BUNDLE_GUI_IDENTIFIER kurisu.iiens.net
     MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
     MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
 )
@@ -168,7 +187,11 @@ qt_finalize_executable(Vivy)
 if("x${CMAKE_BUILD_TYPE}" STREQUAL "xDebug")
     if (NOT "x${VIVY_DISABLE_ASAN}" STREQUAL "xyes")
         if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
-            target_compile_options(Vivy PRIVATE -g -O1 -fsanitize=address -fno-omit-frame-pointer -fsanitize-address-use-after-return=always)
+            target_compile_options(Vivy PRIVATE -g -O1
+                -fsanitize=address
+                -fno-omit-frame-pointer
+                -fsanitize-address-use-after-return=always
+            )
         elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
             target_compile_options(Vivy PRIVATE -g -O1 -fsanitize=address -fno-omit-frame-pointer)
         endif()
@@ -176,3 +199,17 @@ if("x${CMAKE_BUILD_TYPE}" STREQUAL "xDebug")
         target_link_libraries(Vivy PRIVATE -g -O1 -fsanitize=address)
     endif()
 endif()
+
+
+# Linking stuff
+if(UNIX)
+    target_link_options(Vivy PRIVATE -Wl,-rpath,. -rdynamic)
+elseif(WIN32)
+    target_link_options(Vivy PRIVATE
+        -static
+        -Wl,-rpath,.
+        -Wl,-allow-multiple-definition
+        -Wl,-exclude-all-symbols
+    )
+    target_link_libraries(Vivy PRIVATE regex dlfcn-win32::dl ws2_32)
+endif()
diff --git a/PreCompiledHeaders.cmake b/PreCompiledHeaders.cmake
deleted file mode 100644
index 82bc055d..00000000
--- a/PreCompiledHeaders.cmake
+++ /dev/null
@@ -1,152 +0,0 @@
-# System headers
-set(STL_INC
-    PRIVATE
-    <memory>
-    <vector>
-    <atomic>
-    <algorithm>
-    <stdexcept>
-    <sstream>
-    <map>
-    <utility>
-    <locale>
-    <functional>
-    <initializer_list>
-    <cstring>
-    <string>
-    <string_view>
-    <cstdio>
-    <iostream>
-    <optional>
-    <type_traits>
-    <chrono>
-    <climits>
-    <ctype.h>
-    <mutex>
-    <iomanip>
-    <filesystem>
-    <bit>
-    <cfloat>
-)
-
-set(EXT_INC PRIVATE
-    <mpv/client.h>
-)
-
-set(QT_STRUCT_INC
-    PRIVATE
-    <qglobal.h>
-    <QThread>
-    <QOperatingSystemVersion>
-    <QtGlobal>
-    <QObject>
-    <QRegularExpression>
-    <QString>
-    <QVariant>
-    <QFile>
-    <QDebug>
-    <QHash>
-    <QDir>
-    <QTextStream>
-    <QFileInfo>
-    <QMessageLogger>
-    <QUuid>
-    <QPointer>
-    <QProcess>
-    <QTimer>
-    <QStack>
-    <QTemporaryFile>
-    <QStandardPaths>
-    <QList>
-    <QVector>
-    <QMap>
-    <QSettings>
-    <QStringList>
-    <QMetaEnum>
-    <QJsonObject>
-    <QJsonArray>
-    <QJsonDocument>
-    <QJsonValue>
-)
-
-set(QT_WIDGET_INC
-    PRIVATE
-    <QCoreApplication>
-    <QTextDocument>
-    <QColor>
-    <QPalette>
-    <QWidget>
-    <QIcon>
-    <QFont>
-    <QPixmap>
-    <QApplication>
-    <QCloseEvent>
-    <QLabel>
-    <QPushButton>
-    <QVBoxLayout>
-    <QHBoxLayout>
-    <QEvent>
-    <QMouseEvent>
-    <QTextEdit>
-    <QDockWidget>
-    <QMenu>
-    <QFileDialog>
-    <QMutex>
-    <QMainWindow>
-    <QPainter>
-    <QPlainTextEdit>
-    <QSlider>
-    <QAbstractItemModel>
-    <QHeaderView>
-    <QPaintEvent>
-    <QTableView>
-    <QStyledItemDelegate>
-    <QMessageBox>
-    <QScrollBar>
-    <QScrollArea>
-    <QGraphicsPixmapItem>
-    <QGraphicsSceneMouseEvent>
-    <QPen>
-    <QAction>
-    <QGraphicsItem>
-    <QGraphicsLineItem>
-    <QTreeView>
-    <QGraphicsView>
-    <QGraphicsScene>
-    <QWindow>
-    <QAbstractScrollArea>
-    <QGraphicsLineItem>
-    <QGraphicsPixmapItem>
-    <QClipboard>
-    <QInputMethodEvent>
-    <QKeyEvent>
-    <QLineEdit>
-    <QTextBlock>
-    <QTextCursor>
-    <QTextDocumentFragment>
-    <QMimeData>
-    <QSharedPointer>
-    <QStatusBar>
-    <QBrush>
-    <QFrame>
-    <QSyntaxHighlighter>
-    <QTextCharFormat>
-    <QTabWidget>
-    <QLayoutItem>
-    <QLayout>
-    <QEventLoop>
-    <QImage>
-    <QToolBar>
-    <QMenuBar>
-    <QDialogButtonBox>
-    <QFileIconProvider>
-    <QFontDatabase>
-    <QListWidget>
-)
-
-set(Vivy_PRECOMPILED_INC PRIVATE
-    ${STL_INC}
-    ${QT_STRUCT_INC}
-    ${QT_WIDGET_INC}
-    ${EXT_INC}
-)
diff --git a/src/UI/DocumentViews/MpvContainer.cc b/src/UI/DocumentViews/MpvContainer.cc
index 104463b8..5eae3d61 100644
--- a/src/UI/DocumentViews/MpvContainer.cc
+++ b/src/UI/DocumentViews/MpvContainer.cc
@@ -205,8 +205,6 @@ MpvContainer::handleMpvEvent(const mpv_event *const event) noexcept
     case MPV_EVENT_GET_PROPERTY_REPLY:
     case MPV_EVENT_SET_PROPERTY_REPLY:
     case MPV_EVENT_FILE_LOADED:
-    case MPV_EVENT_IDLE:
-    case MPV_EVENT_TICK:
     case MPV_EVENT_CLIENT_MESSAGE:
     case MPV_EVENT_AUDIO_RECONFIG:
     case MPV_EVENT_SEEK:
diff --git a/utils/scripts/count-lines.sh b/utils/scripts/count-lines.sh
new file mode 100755
index 00000000..4971cb7e
--- /dev/null
+++ b/utils/scripts/count-lines.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+set -xe
+_ROOT="$(git rev-parse --show-toplevel)"
+cd "$_ROOT"
+cloc --vcs=git
-- 
GitLab