From a4bd9bcdd1caf7f8eff213dcbf535bad84c02171 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Tue, 6 Jul 2021 21:22:22 +0200
Subject: [PATCH] BUILD: New folder hierarchy

Two main folders: Lib and UI. The Lib is specialized in Document and
Ass, the UI is specialized for private DocumentViews (private document
views) and others (future ScriptViews, etc)
---
 CMakeLists.txt                                | 64 ++++++-------------
 src/{ => Lib}/Ass/Ass.hh                      |  0
 src/{ => Lib}/Ass/AssFactory.cc               |  0
 src/{ => Lib}/Ass/AssFactory.hh               |  2 +-
 src/{ => Lib}/Ass/Char.cc                     |  0
 src/{ => Lib}/Ass/Char.hh                     |  0
 src/{ => Lib}/Ass/Line.cc                     |  0
 src/{ => Lib}/Ass/Line.hh                     |  0
 src/{ => Lib}/Ass/Style.cc                    |  0
 src/{ => Lib}/Ass/Style.hh                    |  0
 src/{ => Lib}/Ass/StyleProperties.hh          |  0
 src/{ => Lib}/Ass/Syl.cc                      |  0
 src/{ => Lib}/Ass/Syl.hh                      |  0
 src/{ => Lib}/Document/CRTPSubDocument.cc     |  0
 src/{ => Lib}/Document/CRTPSubDocument.hh     |  4 +-
 src/{ => Lib}/Document/VivyDocument.cc        |  2 +-
 src/{ => Lib}/Document/VivyDocument.hh        |  2 +-
 src/{ => Lib}/Document/VivyDocumentStore.cc   |  0
 src/{ => Lib}/Document/VivyDocumentStore.hh   |  2 +-
 src/UI/{ => DocumentViews}/AudioVisualizer.cc |  2 +-
 src/UI/{ => DocumentViews}/AudioVisualizer.hh |  2 +-
 src/UI/{ => DocumentViews}/TimingBar.cc       |  0
 src/UI/{ => DocumentViews}/TimingBar.hh       |  0
 src/UI/{ => DocumentViews}/TimingScene.cc     |  2 +-
 src/UI/{ => DocumentViews}/TimingScene.hh     |  4 +-
 src/UI/{ => DocumentViews}/TimingView.cc      |  0
 src/UI/{ => DocumentViews}/TimingView.hh      |  2 +-
 src/UI/MainWindow.hh                          |  4 +-
 src/UI/VivyDocumentView.cc                    |  4 +-
 src/UI/VivyDocumentView.hh                    |  4 +-
 src/VivyApplication.hh                        |  2 +-
 31 files changed, 40 insertions(+), 62 deletions(-)
 rename src/{ => Lib}/Ass/Ass.hh (100%)
 rename src/{ => Lib}/Ass/AssFactory.cc (100%)
 rename src/{ => Lib}/Ass/AssFactory.hh (98%)
 rename src/{ => Lib}/Ass/Char.cc (100%)
 rename src/{ => Lib}/Ass/Char.hh (100%)
 rename src/{ => Lib}/Ass/Line.cc (100%)
 rename src/{ => Lib}/Ass/Line.hh (100%)
 rename src/{ => Lib}/Ass/Style.cc (100%)
 rename src/{ => Lib}/Ass/Style.hh (100%)
 rename src/{ => Lib}/Ass/StyleProperties.hh (100%)
 rename src/{ => Lib}/Ass/Syl.cc (100%)
 rename src/{ => Lib}/Ass/Syl.hh (100%)
 rename src/{ => Lib}/Document/CRTPSubDocument.cc (100%)
 rename src/{ => Lib}/Document/CRTPSubDocument.hh (98%)
 rename src/{ => Lib}/Document/VivyDocument.cc (99%)
 rename src/{ => Lib}/Document/VivyDocument.hh (98%)
 rename src/{ => Lib}/Document/VivyDocumentStore.cc (100%)
 rename src/{ => Lib}/Document/VivyDocumentStore.hh (97%)
 rename src/UI/{ => DocumentViews}/AudioVisualizer.cc (98%)
 rename src/UI/{ => DocumentViews}/AudioVisualizer.hh (97%)
 rename src/UI/{ => DocumentViews}/TimingBar.cc (100%)
 rename src/UI/{ => DocumentViews}/TimingBar.hh (100%)
 rename src/UI/{ => DocumentViews}/TimingScene.cc (98%)
 rename src/UI/{ => DocumentViews}/TimingScene.hh (95%)
 rename src/UI/{ => DocumentViews}/TimingView.cc (100%)
 rename src/UI/{ => DocumentViews}/TimingView.hh (96%)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 576c6196..f308c7b9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,45 +1,35 @@
 cmake_minimum_required(VERSION 3.5)
 
+# Alpho Vivy, CXX only
 project(Vivy VERSION 0.1 LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
 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
 
+# For Qt
 set(CMAKE_AUTOUIC ON)
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTORCC ON)
 
+# C++20, at least we try
 set(CMAKE_CXX_STANDARD 20)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
+# Pthread ftw
 set(THREADS_PREFER_PTHREAD_FLAG ON)
 
-# Find all dependencies
-find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
+# Find Qt dependencies
+find_package(QT NAMES Qt6 Qt5      COMPONENTS Widgets REQUIRED)
 find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
-find_library(AVCODEC_LIBRARY avcodec 4.0 REQUIRED)
-find_library(AVUTIL_LIBRARY avutil 4.0 REQUIRED)
-find_library(SWRESAMPLE_LIBRARY swresample REQUIRED)
-find_library(AVFORMAT_LIBRARY avformat REQUIRED)
 
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
+# Find others dependencies
+find_library(AVCODEC_LIBRARY    avcodec     4.0 REQUIRED)
+find_library(AVUTIL_LIBRARY     avutil      4.0 REQUIRED)
+find_library(SWRESAMPLE_LIBRARY swresample      REQUIRED)
+find_library(AVFORMAT_LIBRARY   avformat        REQUIRED)
 
 # Grab all files
-file(GLOB Vivy_SRC
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/*.cc"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/*.cc"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/*.cc"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/*.cc"
-)
-file(GLOB Vivy_INC
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/*.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/*.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/*.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/*.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/*.hh"
-)
+file(GLOB_RECURSE Vivy_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc")
+file(GLOB_RECURSE Vivy_INC "${CMAKE_CURRENT_SOURCE_DIR}/src/*.hh")
 set(PROJECT_SOURCES
     ${Vivy_SRC}
     ${Vivy_INC}
@@ -68,24 +58,7 @@ target_link_libraries(Vivy PRIVATE ${AVFORMAT_LIBRARY})
 
 # Headers related things
 target_include_directories(Vivy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/inc)
-target_precompile_headers(Vivy PRIVATE
-    # ASS headers
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Ass.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Line.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Syl.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Style.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/AssFactory.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Char.hh"
-
-    # Libs
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/Utils.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/Audio.hh"
-
-    # Document headers
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/VivyDocument.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/VivyDocumentStore.hh"
-    "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/CRTPSubDocument.hh"
-)
+target_precompile_headers(Vivy PRIVATE ${Vivy_INC})
 
 # More options and warnings
 target_compile_options(Vivy PRIVATE
@@ -96,11 +69,16 @@ target_compile_options(Vivy PRIVATE
     -Woverloaded-virtual -Wnon-virtual-dtor
 )
 
+# Some compiler specific warnings and options
 if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
     target_compile_options(Vivy PRIVATE
-        -Wno-unused-private-field # Skip the unused private fields for now
+        -Wno-unused-private-field   # Skip the unused private fields for now
+        -fopenmp                    # We do OpenMP here
     )
+    target_link_libraries(Vivy PRIVATE -fopenmp)
 elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
+    target_compile_options(Vivy PRIVATE -fopenmp)
+    target_link_libraries(Vivy PRIVATE -fopenmp)
 endif()
 
 set_target_properties(Vivy PROPERTIES
diff --git a/src/Ass/Ass.hh b/src/Lib/Ass/Ass.hh
similarity index 100%
rename from src/Ass/Ass.hh
rename to src/Lib/Ass/Ass.hh
diff --git a/src/Ass/AssFactory.cc b/src/Lib/Ass/AssFactory.cc
similarity index 100%
rename from src/Ass/AssFactory.cc
rename to src/Lib/Ass/AssFactory.cc
diff --git a/src/Ass/AssFactory.hh b/src/Lib/Ass/AssFactory.hh
similarity index 98%
rename from src/Ass/AssFactory.hh
rename to src/Lib/Ass/AssFactory.hh
index e5343ec9..48f849b0 100644
--- a/src/Ass/AssFactory.hh
+++ b/src/Lib/Ass/AssFactory.hh
@@ -1,7 +1,7 @@
 #ifndef VIVY_ASS_FACTORY_H
 #define VIVY_ASS_FACTORY_H
 
-#include "../Lib/Utils.hh"
+#include "../Utils.hh"
 #include "Style.hh"
 #include "Line.hh"
 
diff --git a/src/Ass/Char.cc b/src/Lib/Ass/Char.cc
similarity index 100%
rename from src/Ass/Char.cc
rename to src/Lib/Ass/Char.cc
diff --git a/src/Ass/Char.hh b/src/Lib/Ass/Char.hh
similarity index 100%
rename from src/Ass/Char.hh
rename to src/Lib/Ass/Char.hh
diff --git a/src/Ass/Line.cc b/src/Lib/Ass/Line.cc
similarity index 100%
rename from src/Ass/Line.cc
rename to src/Lib/Ass/Line.cc
diff --git a/src/Ass/Line.hh b/src/Lib/Ass/Line.hh
similarity index 100%
rename from src/Ass/Line.hh
rename to src/Lib/Ass/Line.hh
diff --git a/src/Ass/Style.cc b/src/Lib/Ass/Style.cc
similarity index 100%
rename from src/Ass/Style.cc
rename to src/Lib/Ass/Style.cc
diff --git a/src/Ass/Style.hh b/src/Lib/Ass/Style.hh
similarity index 100%
rename from src/Ass/Style.hh
rename to src/Lib/Ass/Style.hh
diff --git a/src/Ass/StyleProperties.hh b/src/Lib/Ass/StyleProperties.hh
similarity index 100%
rename from src/Ass/StyleProperties.hh
rename to src/Lib/Ass/StyleProperties.hh
diff --git a/src/Ass/Syl.cc b/src/Lib/Ass/Syl.cc
similarity index 100%
rename from src/Ass/Syl.cc
rename to src/Lib/Ass/Syl.cc
diff --git a/src/Ass/Syl.hh b/src/Lib/Ass/Syl.hh
similarity index 100%
rename from src/Ass/Syl.hh
rename to src/Lib/Ass/Syl.hh
diff --git a/src/Document/CRTPSubDocument.cc b/src/Lib/Document/CRTPSubDocument.cc
similarity index 100%
rename from src/Document/CRTPSubDocument.cc
rename to src/Lib/Document/CRTPSubDocument.cc
diff --git a/src/Document/CRTPSubDocument.hh b/src/Lib/Document/CRTPSubDocument.hh
similarity index 98%
rename from src/Document/CRTPSubDocument.hh
rename to src/Lib/Document/CRTPSubDocument.hh
index 16c86dd2..f89b26f6 100644
--- a/src/Document/CRTPSubDocument.hh
+++ b/src/Lib/Document/CRTPSubDocument.hh
@@ -5,8 +5,8 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Lib/Utils.hh"
-#include "../Lib/Audio.hh"
+#include "../Utils.hh"
+#include "../Audio.hh"
 #include "../Ass/Ass.hh"
 #include <QString>
 #include <memory>
diff --git a/src/Document/VivyDocument.cc b/src/Lib/Document/VivyDocument.cc
similarity index 99%
rename from src/Document/VivyDocument.cc
rename to src/Lib/Document/VivyDocument.cc
index ed97966b..66708df9 100644
--- a/src/Document/VivyDocument.cc
+++ b/src/Lib/Document/VivyDocument.cc
@@ -1,5 +1,5 @@
 #include "VivyDocument.hh"
-#include "../Lib/Utils.hh"
+#include "../Utils.hh"
 
 #include <QFileInfo>
 #include <QString>
diff --git a/src/Document/VivyDocument.hh b/src/Lib/Document/VivyDocument.hh
similarity index 98%
rename from src/Document/VivyDocument.hh
rename to src/Lib/Document/VivyDocument.hh
index 8e29b3db..da2f91a9 100644
--- a/src/Document/VivyDocument.hh
+++ b/src/Lib/Document/VivyDocument.hh
@@ -5,7 +5,7 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Lib/Utils.hh"
+#include "../Utils.hh"
 #include "CRTPSubDocument.hh"
 
 #include <memory>
diff --git a/src/Document/VivyDocumentStore.cc b/src/Lib/Document/VivyDocumentStore.cc
similarity index 100%
rename from src/Document/VivyDocumentStore.cc
rename to src/Lib/Document/VivyDocumentStore.cc
diff --git a/src/Document/VivyDocumentStore.hh b/src/Lib/Document/VivyDocumentStore.hh
similarity index 97%
rename from src/Document/VivyDocumentStore.hh
rename to src/Lib/Document/VivyDocumentStore.hh
index 047a49ab..f25fd3f7 100644
--- a/src/Document/VivyDocumentStore.hh
+++ b/src/Lib/Document/VivyDocumentStore.hh
@@ -2,7 +2,7 @@
 #define VIVY_DOCUMENTSTORE_H
 
 #include "VivyDocument.hh"
-#include "../Lib/Utils.hh"
+#include "../Utils.hh"
 
 #include <QMap>
 #include <QString>
diff --git a/src/UI/AudioVisualizer.cc b/src/UI/DocumentViews/AudioVisualizer.cc
similarity index 98%
rename from src/UI/AudioVisualizer.cc
rename to src/UI/DocumentViews/AudioVisualizer.cc
index d55f2d1c..fa8d02c1 100644
--- a/src/UI/AudioVisualizer.cc
+++ b/src/UI/DocumentViews/AudioVisualizer.cc
@@ -1,5 +1,5 @@
 #include "AudioVisualizer.hh"
-#include "../Lib/Audio.hh"
+#include "../../Lib/Audio.hh"
 
 #include <algorithm>
 #include <QGraphicsPixmapItem>
diff --git a/src/UI/AudioVisualizer.hh b/src/UI/DocumentViews/AudioVisualizer.hh
similarity index 97%
rename from src/UI/AudioVisualizer.hh
rename to src/UI/DocumentViews/AudioVisualizer.hh
index 3273d285..451d5080 100644
--- a/src/UI/AudioVisualizer.hh
+++ b/src/UI/DocumentViews/AudioVisualizer.hh
@@ -6,7 +6,7 @@
 #endif
 
 #include "TimingView.hh"
-#include "../Lib/Audio.hh"
+#include "../../Lib/Audio.hh"
 #include <QWidget>
 #include <QString>
 
diff --git a/src/UI/TimingBar.cc b/src/UI/DocumentViews/TimingBar.cc
similarity index 100%
rename from src/UI/TimingBar.cc
rename to src/UI/DocumentViews/TimingBar.cc
diff --git a/src/UI/TimingBar.hh b/src/UI/DocumentViews/TimingBar.hh
similarity index 100%
rename from src/UI/TimingBar.hh
rename to src/UI/DocumentViews/TimingBar.hh
diff --git a/src/UI/TimingScene.cc b/src/UI/DocumentViews/TimingScene.cc
similarity index 98%
rename from src/UI/TimingScene.cc
rename to src/UI/DocumentViews/TimingScene.cc
index 7d2e2115..3c916fd0 100644
--- a/src/UI/TimingScene.cc
+++ b/src/UI/DocumentViews/TimingScene.cc
@@ -1,5 +1,5 @@
 #include "TimingScene.hh"
-#include "../Lib/Utils.hh"
+#include "../../Lib/Utils.hh"
 
 #include <QGraphicsLineItem>
 #include <QGraphicsPixmapItem>
diff --git a/src/UI/TimingScene.hh b/src/UI/DocumentViews/TimingScene.hh
similarity index 95%
rename from src/UI/TimingScene.hh
rename to src/UI/DocumentViews/TimingScene.hh
index 860acecb..901de0fa 100644
--- a/src/UI/TimingScene.hh
+++ b/src/UI/DocumentViews/TimingScene.hh
@@ -1,8 +1,8 @@
 #ifndef VIVY_TIMING_SCENE_H
 #define VIVY_TIMING_SCENE_H
 
-#include "../Lib/Utils.hh"
-#include "../Ass/Ass.hh"
+#include "../../Lib/Utils.hh"
+#include "../../Lib/Ass/Ass.hh"
 #include "TimingBar.hh"
 
 #include <QWidget>
diff --git a/src/UI/TimingView.cc b/src/UI/DocumentViews/TimingView.cc
similarity index 100%
rename from src/UI/TimingView.cc
rename to src/UI/DocumentViews/TimingView.cc
diff --git a/src/UI/TimingView.hh b/src/UI/DocumentViews/TimingView.hh
similarity index 96%
rename from src/UI/TimingView.hh
rename to src/UI/DocumentViews/TimingView.hh
index b2f11f79..8f4328fa 100644
--- a/src/UI/TimingView.hh
+++ b/src/UI/DocumentViews/TimingView.hh
@@ -5,7 +5,7 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Lib/Utils.hh"
+#include "../../Lib/Utils.hh"
 #include "TimingBar.hh"
 #include "TimingScene.hh"
 
diff --git a/src/UI/MainWindow.hh b/src/UI/MainWindow.hh
index 45910f4a..dc694444 100644
--- a/src/UI/MainWindow.hh
+++ b/src/UI/MainWindow.hh
@@ -6,8 +6,8 @@
 #endif
 
 #include "../Lib/Utils.hh"
-#include "AudioVisualizer.hh"
-#include "../Document/VivyDocumentStore.hh"
+#include "../Lib/Document/VivyDocumentStore.hh"
+#include "DocumentViews/AudioVisualizer.hh"
 #include "VivyDocumentView.hh"
 #include <QMainWindow>
 
diff --git a/src/UI/VivyDocumentView.cc b/src/UI/VivyDocumentView.cc
index 962f33d4..e7d54012 100644
--- a/src/UI/VivyDocumentView.cc
+++ b/src/UI/VivyDocumentView.cc
@@ -1,8 +1,8 @@
 #include "VivyDocumentView.hh"
-#include "AudioVisualizer.hh"
 #include "PropertyModel.hh"
+#include "DocumentViews/AudioVisualizer.hh"
 #include "../VivyApplication.hh"
-#include "../Document/VivyDocument.hh"
+#include "../Lib/Document/VivyDocument.hh"
 
 #include <QHeaderView>
 #include <QTreeView>
diff --git a/src/UI/VivyDocumentView.hh b/src/UI/VivyDocumentView.hh
index 70535b45..28d991b8 100644
--- a/src/UI/VivyDocumentView.hh
+++ b/src/UI/VivyDocumentView.hh
@@ -5,8 +5,8 @@
 #error "This is a C++ header"
 #endif
 
-#include "../Document/VivyDocument.hh"
-#include "AudioVisualizer.hh"
+#include "../Lib/Document/VivyDocument.hh"
+#include "DocumentViews/AudioVisualizer.hh"
 #include "DocumentView.hh"
 #include "PropertyModel.hh"
 
diff --git a/src/VivyApplication.hh b/src/VivyApplication.hh
index 4492f054..579f9b78 100644
--- a/src/VivyApplication.hh
+++ b/src/VivyApplication.hh
@@ -9,7 +9,7 @@
 
 #include <QApplication>
 #include <QPixmap>
-#include "Document/VivyDocumentStore.hh"
+#include "Lib/Document/VivyDocumentStore.hh"
 #include <memory>
 
 namespace Vivy
-- 
GitLab