From 43a8b2fe4d9c05b6c2ed2942777e2e5700847c9b Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Fri, 23 Oct 2020 09:41:23 +0200
Subject: [PATCH] [build] fix obj file generation for assdraw, still not
 linking

---
 README.md                            |   2 +
 assdraw/Makefile                     |  34 ++++-----
 assdraw/agg_bcspline.h               |   2 +-
 assdraw/agg_conv_bcspline.h          |   4 +-
 assdraw/agg_vcgen_bcspline.h         |   4 +-
 assdraw/agghelper.hpp                |   2 +-
 assdraw/assdraw.cpp                  |   3 +-
 assdraw/canvas.cpp                   | 106 ++++++++++++++++++---------
 assdraw/canvas.hpp                   |  12 +--
 assdraw/engine.hpp                   |  24 +++---
 assdraw/wxAGG/AGGWindow.cpp          |   4 +-
 assdraw/wxAGG/AGGWindow.h            |   2 +-
 assdraw/wxAGG/PixelFormatConvertor.h |   4 +-
 libaegisub/lua/modules/lfs.cpp       |   2 +-
 src/mkv_wrap.cpp                     |   2 +-
 15 files changed, 121 insertions(+), 86 deletions(-)

diff --git a/README.md b/README.md
index 8632f33e6..d1208c010 100644
--- a/README.md
+++ b/README.md
@@ -23,6 +23,7 @@ Install all the dependencies with the package manager of your distribution:
 - opengl
 - openal
 - openssl or libressl
+- agg
 
 Optional dependencies:
 
@@ -55,6 +56,7 @@ On debian buster, the packages are the following:
 - libboost-regex-dev
 - libboost-thread-dev
 - astyle
+- libagg-dev
 
 ### Build the binary
 
diff --git a/assdraw/Makefile b/assdraw/Makefile
index 341273235..23f2479d6 100644
--- a/assdraw/Makefile
+++ b/assdraw/Makefile
@@ -2,15 +2,6 @@ include $(dir $(lastword $(MAKEFILE_LIST)))../header.mk
 
 PROGRAM += $(d)assdraw
 
-libres_SOURCES := \
-	$(d)xpm/res.cpp \
-	$(d)xpm/res.h
-
-libaggwindow_SOURCES := \
-	$(d)wxAGG/AGGWindow.cpp \
-	$(d)wxAGG/AGGWindow.h \
-	$(d)wxAGG/PixelFormatConvertor.h
-
 assdraw_EXTRA_DIST := \
 	$(d)_common.hpp \
 	$(d)agghelper.hpp \
@@ -23,11 +14,18 @@ assdraw_EXTRA_DIST := \
 	$(d)enums.hpp \
 	$(d)include_once.hpp \
 	$(d)library.hpp \
-	$(d)settings.hpp
+	$(d)settings.hpp \
+ 	$(d)agg_bcspline.h \
+ 	$(d)agg_conv_bcspline.h \
+ 	$(d)agg_vcgen_bcspline.h \
+ 	$(d)resource.h \
+	$(d)xpm/res.h \
+	$(d)wxAGG/AGGWindow.h \
+	$(d)wxAGG/PixelFormatConvertor.h
 
 assdraw_SOURCES := \
-	$(libres_SOURCES) \
-	$(libaggwindow_SOURCES) \
+	$(d)xpm/res.cpp \
+	$(d)wxAGG/AGGWindow.cpp \
 	$(d)agg_bcspline.cpp \
 	$(d)agg_vcgen_bcspline.cpp \
 	$(d)assdraw.cpp \
@@ -40,11 +38,7 @@ assdraw_SOURCES := \
 	$(d)library.cpp \
 	$(d)settings.cpp
 
-assdraw_SOURCES += \
-	$(d)agg_bcspline.h \
-	$(d)agg_conv_bcspline.h \
-	$(d)agg_vcgen_bcspline.h \
-	$(d)resource.h
-
-
-assdraw_OBJ := $(assdraw_SOURCES:.cpp=.o)
+assdraw_CPPFLAGS := -I$(d)
+assdraw_CXXFLAGS := $(CXXFLAGS_WX)
+assdraw_OBJ      := $(assdraw_SOURCES:.cpp=.o)
+assdraw_LIBS     := $(LIBS_WX)
diff --git a/assdraw/agg_bcspline.h b/assdraw/agg_bcspline.h
index e5f049b97..a91d4ba3e 100644
--- a/assdraw/agg_bcspline.h
+++ b/assdraw/agg_bcspline.h
@@ -25,7 +25,7 @@
 #ifndef AGG_bcspline_INCLUDED
 #define AGG_bcspline_INCLUDED
 
-#include "agg_array.h"
+#include <agg2/agg_array.h>
 
 namespace agg {
 //----------------------------------------------------------------bcspline
diff --git a/assdraw/agg_conv_bcspline.h b/assdraw/agg_conv_bcspline.h
index 6a4cac602..984ddcfbc 100644
--- a/assdraw/agg_conv_bcspline.h
+++ b/assdraw/agg_conv_bcspline.h
@@ -25,9 +25,9 @@
 #ifndef AGG_conv_bcspline_INCLUDED
 #define AGG_conv_bcspline_INCLUDED
 
-#include "agg_basics.h"
+#include <agg2/agg_basics.h>
 #include "agg_vcgen_bcspline.h"
-#include "agg_conv_adaptor_vcgen.h"
+#include <agg2/agg_conv_adaptor_vcgen.h>
 
 
 namespace agg {
diff --git a/assdraw/agg_vcgen_bcspline.h b/assdraw/agg_vcgen_bcspline.h
index e9f68577b..f7e5b85b8 100644
--- a/assdraw/agg_vcgen_bcspline.h
+++ b/assdraw/agg_vcgen_bcspline.h
@@ -25,8 +25,8 @@
 #ifndef AGG_vcgen_bcspline_INCLUDED
 #define AGG_vcgen_bcspline_INCLUDED
 
-#include "agg_basics.h"
-#include "agg_array.h"
+#include <agg2/agg_basics.h>
+#include <agg2/agg_array.h>
 #include "agg_bcspline.h"
 
 
diff --git a/assdraw/agghelper.hpp b/assdraw/agghelper.hpp
index 4a2a9904f..a42916ccc 100644
--- a/assdraw/agghelper.hpp
+++ b/assdraw/agghelper.hpp
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "agg_path_storage.h"
+#include <agg2/agg_path_storage.h>
 
 class agghelper {
 public:
diff --git a/assdraw/assdraw.cpp b/assdraw/assdraw.cpp
index b80966e5d..ebb3af45e 100644
--- a/assdraw/assdraw.cpp
+++ b/assdraw/assdraw.cpp
@@ -615,11 +615,12 @@ void ASSDrawFrame::OnChoose_TBarRClickMenu(wxCommandEvent &event)
         if (tb[i]) {
             if (show[0])
                 m_mgr.GetPane(tbar[i]).Show(show[1]);
-            if (dock[0])
+            if (dock[0]) {
                 if (dock[1])
                     m_mgr.GetPane(tbar[i]).Dock();
                 else
                     m_mgr.GetPane(tbar[i]).Float();
+            }
         }
     }
     m_mgr.Update();
diff --git a/assdraw/canvas.cpp b/assdraw/canvas.cpp
index 56f6fe615..8cbe7929c 100644
--- a/assdraw/canvas.cpp
+++ b/assdraw/canvas.cpp
@@ -35,11 +35,11 @@
 
 #include "assdraw.hpp"
 #include "cmd.hpp"
-#include "agg_gsv_text.h"
-#include "agg_ellipse.h"
-#include "agg_conv_dash.h"
-#include "agg_trans_bilinear.h"
-#include "agg_trans_perspective.h"
+#include <agg2/agg_gsv_text.h>
+#include <agg2/agg_ellipse.h>
+#include <agg2/agg_conv_dash.h>
+#include <agg2/agg_trans_bilinear.h>
+#include <agg2/agg_trans_perspective.h>
 
 #include "agghelper.hpp"
 #include <math.h>
@@ -300,6 +300,7 @@ void ASSDrawCanvas::OnMouseMove(wxMouseEvent &event)
                     undodesc = _T("Bilinear transform");
                     *dragAnchor_left = mouse_point;
                     break;
+
                 case MODE_SCALEROTATE:
                     if (rectbound2upd2 == -1) { //only one vertex dragged
                         int adjacent[2] = { (rectbound2upd + 3) % 4, (rectbound2upd + 1) % 4 };
@@ -378,6 +379,10 @@ void ASSDrawCanvas::OnMouseMove(wxMouseEvent &event)
                     UpdateTranformModeRectCenter();
                     undodesc = _T("Scale");
                     break;
+
+                default:
+                    /* FIXME: Add an error message here */
+                    break;
                 }
 
                 // update points
@@ -577,11 +582,17 @@ void ASSDrawCanvas::ProcessOnMouseLeftUp()
         newcommand->Init();
         switch (newcommand->type) {
         case M:
-            undodesc = _T("Add a new M"); break;
+            undodesc = _T("Add a new M");
+            break;
         case L:
-            undodesc = _T("Add a new L"); break;
+            undodesc = _T("Add a new L");
+            break;
         case B:
-            undodesc = _T("Add a new B"); break;
+            undodesc = _T("Add a new B");
+            break;
+        default:
+            /* FIXME: Add an error message here */
+            break;
         }
         newcommand = NULL;
         // we need to manually refresh the GUI to draw the new control points
@@ -603,11 +614,17 @@ void ASSDrawCanvas::ProcessOnMouseLeftUp()
             RefreshDisplay();
             switch (t) {
             case M:
-                undodesc = _T("Delete a M"); break;
+                undodesc = _T("Delete a M");
+                break;
             case L:
-                undodesc = _T("Delete a L"); break;
+                undodesc = _T("Delete a L");
+                break;
             case B:
-                undodesc = _T("Delete a B"); break;
+                undodesc = _T("Delete a B");
+                break;
+            default:
+                /* FIXME: Add an error message here */
+                break;
             }
         }
         else {
@@ -675,6 +692,9 @@ void ASSDrawCanvas::OnMouseLeftDown(wxMouseEvent &event)
     case MODE_B:
         newcommand = NewCmd(B, px, py);
         break;
+    default:
+        /* FIXME: Add an error message here */
+        break;
     }
 
     // continue working on the new command (if any)
@@ -812,10 +832,12 @@ void ASSDrawCanvas::OnMouseRightDClick(wxMouseEvent &event)
 #endif
         menu->Append(cmdmenuitem);
         menu->Enable(MENU_DUMMY, false);
+
         switch (dblclicked_point_right->cmd_main->type) {
         case L:
             menu->Append(MENU_DRC_LNTOBEZ, _T("Convert to Bezier curve (B command)"));
             break;
+
         case B:
             if (dblclicked_point_right->type != MP) break;
             menu->AppendCheckItem(MENU_DRC_BEZTOLN, _T("Convert to line (L command)"));
@@ -825,6 +847,10 @@ void ASSDrawCanvas::OnMouseRightDClick(wxMouseEvent &event)
                     menu->Check(MENU_DRC_C1CONTBEZ, true);
             }
             break;
+
+        default:
+            /* FIXME: Add an error message here */
+            break;
         }
 
     }
@@ -898,11 +924,12 @@ void ASSDrawCanvas::ChangeZoomLevel( double amount, wxPoint bgzoomctr )
     if (CanZoom() && drag_mode.drawing)
         ChangeDrawingZoomLevel( amount );
 
-    if (CanZoom() && drag_mode.bgimg)
+    if (CanZoom() && drag_mode.bgimg) {
         if (drag_mode.drawing)
             ChangeBackgroundZoomLevel(bgimg.scale * pointsys->scale / old_scale, wxRealPoint(pointsys->originx, pointsys->originy));
         else
             ChangeBackgroundZoomLevel(bgimg.scale + amount / 10.0,  wxRealPoint(bgzoomctr.x, bgzoomctr.y));
+    }
 
     RefreshDisplay();
 }
@@ -952,7 +979,12 @@ void ASSDrawCanvas::MoveCanvasDrawing(double xamount, double yamount)
             rectbound2[i].x += (int) xamount;
             rectbound2[i].y += (int) yamount;
         }
-        unsigned vertices = backupcmds.total_vertices();
+        unsigned vertices_unsigned = backupcmds.total_vertices();
+        int vertices               = vertices_unsigned;
+        if (vertices < 0) {
+            /* Place an overflow error message here */
+            abort();
+        }
         double x, y;
         for (int i = 0; i < vertices; i++) {
             backupcmds.vertex(i, &x, &y);
@@ -1045,7 +1077,8 @@ void ASSDrawCanvas::EnforceC1Continuity (DrawCmd *cmd, Point *pnt)
         theotherpoint = *it;
         mainpoint = prevb->m_point;
     }
-    else if (pnt->num = cmd->controlpoints.size()) {
+    /* XXX: Here replaced `=` by `==`. See if it breaks things or not */
+    else if (pnt->num == cmd->controlpoints.size()) {
         DrawCmd_B *thisb = static_cast< DrawCmd_B * >(cmd);
         if (!thisb->C1Cont) return;
         theotherpoint = *(cmd->m_point->cmd_next->controlpoints.begin());
@@ -1209,7 +1242,7 @@ void ASSDrawCanvas::DoDraw( RendererBase &rbase, RendererPrimitives &rprim, Rend
         rasterizer.reset();
         interpolator_type interpolator(bgimg.img_mtx);
         PixelFormat::AGGType ipixfmt(bgimg.ibuf);
-        span_gen_type spangen(ipixfmt, agg::rgba_pre(0, 0, 0), interpolator);
+        span_gen_type spangen(ipixfmt, agg::rgba_pre(0, 0, 0, 0), interpolator);
         agg::conv_transform< agg::path_storage > bg_border(bgimg.bg_path, bgimg.path_mtx);
         agg::conv_clip_polygon< agg::conv_transform< agg::path_storage >> bg_clip(bg_border);
         bg_clip.clip_box(0, 0, ww, hh);
@@ -1640,7 +1673,12 @@ void ASSDrawCanvas::UpdateNonUniformTransformation()
         rectbound2[3].x, rectbound2[3].y
     };
     agg::path_storage trans;
-    unsigned vertices = backupcmds.total_vertices();
+    unsigned vertices_unsigned = backupcmds.total_vertices();
+    int vertices               = vertices_unsigned;
+    if (vertices < 0) {
+        /* FIXME: Place an abort overflow error message here */
+        abort();
+    }
 
     agg::trans_bilinear trans_b(rectbound[0].x, rectbound[0].y, rectbound[2].x, rectbound[2].y, bound);
     agg::conv_transform<agg::path_storage, agg::trans_bilinear> transb(backupcmds, trans_b);
@@ -1740,33 +1778,33 @@ void ASSDrawCanvas::CustomOnKeyDown(wxKeyEvent &event)
                 }
                 else {
                     Point *warpto = NULL;
-                    if (pointedAt_point->type == MP && pointedAt_point->cmd_next)
+                    if (pointedAt_point->type == MP && pointedAt_point->cmd_next) {
                         if (pointedAt_point->cmd_next->controlpoints.size() > 0)
                             warpto = pointedAt_point->cmd_next->controlpoints.front();
                         else
                             warpto = pointedAt_point->cmd_next->m_point;
+                    }
+                    else {
+                        PointList::iterator it = pointedAt_point->cmd_main->controlpoints.begin();
+                        while (*it != pointedAt_point) it++;
+                        it++;
+                        if (it == pointedAt_point->cmd_main->controlpoints.end())
+                            warpto = pointedAt_point->cmd_main->m_point;
+                        else
+                            warpto = *it;
+                    }
+                    if (warpto == NULL)
+                        warpto = cmds.front()->m_point;
+                    wxPoint point = warpto->ToWxPoint();
+                    WarpPointer(point.x, point.y);
                 }
-                else {
-                    PointList::iterator it = pointedAt_point->cmd_main->controlpoints.begin();
-                    while (*it != pointedAt_point) it++;
-                    it++;
-                    if (it == pointedAt_point->cmd_main->controlpoints.end())
-                        warpto = pointedAt_point->cmd_main->m_point;
-                    else
-                        warpto = *it;
-                }
-                if (warpto == NULL)
-                    warpto = cmds.front()->m_point;
-                wxPoint point = warpto->ToWxPoint();
-                WarpPointer(point.x, point.y);
             }
+            break;
+        default:
+            event.Skip();
         }
-        break;
-    default:
-        event.Skip();
     }
 }
-}
 
 void ASSDrawCanvas::CustomOnKeyUp(wxKeyEvent &event)
 {
diff --git a/assdraw/canvas.hpp b/assdraw/canvas.hpp
index 8f83d6127..73a3ecd44 100644
--- a/assdraw/canvas.hpp
+++ b/assdraw/canvas.hpp
@@ -44,12 +44,12 @@
 #include <wx/splitter.h>
 #include <wx/clntdata.h>
 
-#include "agg_span_allocator.h"
-#include "agg_span_interpolator_linear.h"
-#include "agg_span_image_filter_rgb.h"
-#include "agg_span_image_filter_rgba.h"
-#include "agg_image_accessors.h"
-#include "agg_conv_clip_polygon.h"
+#include <agg2/agg_span_allocator.h>
+#include <agg2/agg_span_interpolator_linear.h>
+#include <agg2/agg_span_image_filter_rgb.h>
+#include <agg2/agg_span_image_filter_rgba.h>
+#include <agg2/agg_image_accessors.h>
+#include <agg2/agg_conv_clip_polygon.h>
 
 class ASSDrawFrame;
 class ASSDrawCanvas;
diff --git a/assdraw/engine.hpp b/assdraw/engine.hpp
index 30c1d4e60..e5155351e 100644
--- a/assdraw/engine.hpp
+++ b/assdraw/engine.hpp
@@ -45,19 +45,19 @@
 
 // agg support
 #include "wxAGG/AGGWindow.h"
-#include "agg_color_rgba.h"
-#include "agg_rasterizer_scanline_aa.h"
-#include "agg_scanline_p.h"
-#include "agg_renderer_base.h"
-#include "agg_renderer_primitives.h"
-#include "agg_renderer_scanline.h"
-#include "agg_path_storage.h"
-#include "agg_curves.h"
-#include "agg_conv_curve.h"
-#include "agg_conv_contour.h"
-#include "agg_conv_stroke.h"
+#include <agg2/agg_color_rgba.h>
+#include <agg2/agg_rasterizer_scanline_aa.h>
+#include <agg2/agg_scanline_p.h>
+#include <agg2/agg_renderer_base.h>
+#include <agg2/agg_renderer_primitives.h>
+#include <agg2/agg_renderer_scanline.h>
+#include <agg2/agg_path_storage.h>
+#include <agg2/agg_curves.h>
+#include <agg2/agg_conv_curve.h>
+#include <agg2/agg_conv_contour.h>
+#include <agg2/agg_conv_stroke.h>
 #include "agg_conv_bcspline.h"
-#include "agg_math.h"
+#include <agg2/agg_math.h>
 
 #define DEFAULT_SCALE 10
 
diff --git a/assdraw/wxAGG/AGGWindow.cpp b/assdraw/wxAGG/AGGWindow.cpp
index f412edfcf..08de41318 100644
--- a/assdraw/wxAGG/AGGWindow.cpp
+++ b/assdraw/wxAGG/AGGWindow.cpp
@@ -1,7 +1,7 @@
 #include "AGGWindow.h"
 
-#include "agg_rendering_buffer.h"
-#include "agg_pixfmt_rgb.h"
+#include <agg2/agg_rendering_buffer.h>
+#include <agg2/agg_pixfmt_rgb.h>
 
 #include <wx/dcclient.h>
 
diff --git a/assdraw/wxAGG/AGGWindow.h b/assdraw/wxAGG/AGGWindow.h
index 3c46990c8..21a91b387 100644
--- a/assdraw/wxAGG/AGGWindow.h
+++ b/assdraw/wxAGG/AGGWindow.h
@@ -8,7 +8,7 @@
 #include <wx/window.h>
 #include <wx/dcmemory.h>
 
-#include "agg_rendering_buffer.h"
+#include <agg2/agg_rendering_buffer.h>
 
 namespace GUI {
 
diff --git a/assdraw/wxAGG/PixelFormatConvertor.h b/assdraw/wxAGG/PixelFormatConvertor.h
index 4f89c4494..f5cfaab12 100644
--- a/assdraw/wxAGG/PixelFormatConvertor.h
+++ b/assdraw/wxAGG/PixelFormatConvertor.h
@@ -28,8 +28,8 @@
 #ifndef WX_AGG_PIXEL_FORMAT_CONVERTOR_H
 #define WX_AGG_PIXEL_FORMAT_CONVERTOR_H
 
-#include "agg_pixfmt_rgb.h"
-#include "agg_pixfmt_rgba.h"
+#include <agg2/agg_pixfmt_rgb.h>
+#include <agg2/agg_pixfmt_rgba.h>
 
 namespace {
 
diff --git a/libaegisub/lua/modules/lfs.cpp b/libaegisub/lua/modules/lfs.cpp
index 8053b6893..38f29d792 100644
--- a/libaegisub/lua/modules/lfs.cpp
+++ b/libaegisub/lua/modules/lfs.cpp
@@ -112,7 +112,7 @@ DirectoryIterator *dir_new(const char *path, char **err)
 
 const char *get_mode(const char *path, char **err)
 {
-    return wrap(err, [ = ]() -> const char* {
+    return wrap(err, [ = ]() -> const char * {
         switch (bfs::status(path).type())
         {
         case bfs::file_not_found: return nullptr;         break;
diff --git a/src/mkv_wrap.cpp b/src/mkv_wrap.cpp
index bc9aa58d9..acb4be0e7 100644
--- a/src/mkv_wrap.cpp
+++ b/src/mkv_wrap.cpp
@@ -105,7 +105,7 @@ struct MkvStdIO final : InputStream {
         read = &MkvStdIO::Read;
         scan = &MkvStdIO::Scan;
         getcachesize = [](InputStream *) -> unsigned int { return 16 * 1024 * 1024; };
-        geterror = [](InputStream * st) -> const char* { return ((MkvStdIO *)st)->error.c_str(); };
+        geterror = [](InputStream * st) -> const char * { return ((MkvStdIO *)st)->error.c_str(); };
         memalloc = [](InputStream *, size_t size) { return malloc(size); };
         memrealloc = [](InputStream *, void *mem, size_t size) { return realloc(mem, size); };
         memfree = [](InputStream *, void *mem) { free(mem); };
-- 
GitLab