Browse Source

Remove pcre2 dependancy

rexim 4 years ago
parent
commit
1b1a50f888
7 changed files with 32 additions and 99 deletions
  1. 3 3
      .github/workflows/ci.yml
  2. 2 2
      Makefile
  3. 1 1
      README.md
  4. 0 3
      src/vodus.cpp
  5. 26 84
      src/vodus_message.cpp
  6. 0 5
      src/vodus_video_params.cpp
  7. 0 1
      src/vodus_video_params.hpp

+ 3 - 3
.github/workflows/ci.yml

@@ -9,7 +9,7 @@ jobs:
       - name: install dependencies
       - name: install dependencies
         run: |
         run: |
           sudo apt-get update
           sudo apt-get update
-          sudo apt-get install -qq nasm libfreetype6-dev libcurl4-openssl-dev libpcre2-dev libglfw3-dev
+          sudo apt-get install -qq nasm libfreetype6-dev libcurl4-openssl-dev libglfw3-dev
       - uses: actions/cache@v2
       - uses: actions/cache@v2
         with:
         with:
           # TODO(#84): centralize third party versions in the build
           # TODO(#84): centralize third party versions in the build
@@ -48,7 +48,7 @@ jobs:
       - uses: actions/checkout@v1
       - uses: actions/checkout@v1
       - name: install dependencies
       - name: install dependencies
         run: |
         run: |
-          brew install nasm freetype2 openssl pcre2 glfw
+          brew install nasm freetype2 openssl glfw
       - uses: actions/cache@v2
       - uses: actions/cache@v2
         with:
         with:
           path: |
           path: |
@@ -88,7 +88,7 @@ jobs:
       - name: install dependencies
       - name: install dependencies
         run: |
         run: |
           sudo apt-get update
           sudo apt-get update
-          sudo apt-get install -qq nasm libfreetype6-dev libcurl4-openssl-dev libpcre2-dev libglfw3-dev
+          sudo apt-get install -qq nasm libfreetype6-dev libcurl4-openssl-dev libglfw3-dev
       - uses: actions/cache@v2
       - uses: actions/cache@v2
         with:
         with:
           path: |
           path: |

+ 2 - 2
Makefile

@@ -8,9 +8,9 @@ endif
 
 
 # TODO(#87): we need an option to build with system libraries
 # TODO(#87): we need an option to build with system libraries
 ifeq ($(UNAME), Darwin)
 ifeq ($(UNAME), Darwin)
-VODUS_PKGS=freetype2 libpcre2-8 glfw3
+VODUS_PKGS=freetype2 glfw3
 else
 else
-VODUS_PKGS=freetype2 libpcre2-8 glfw3 gl
+VODUS_PKGS=freetype2 glfw3 gl
 endif
 endif
 VODUS_CXXFLAGS=-Wall -fno-exceptions -std=c++17 $(VODUS_EXTRA_CXXFLAGS) -ggdb `pkg-config --cflags $(VODUS_PKGS)` -I./third_party/ffmpeg-4.3-dist/usr/local/include/ -I./third_party/giflib-5.2.1-dist/usr/local/include/
 VODUS_CXXFLAGS=-Wall -fno-exceptions -std=c++17 $(VODUS_EXTRA_CXXFLAGS) -ggdb `pkg-config --cflags $(VODUS_PKGS)` -I./third_party/ffmpeg-4.3-dist/usr/local/include/ -I./third_party/giflib-5.2.1-dist/usr/local/include/
 VODUS_LIBS=`pkg-config --libs $(VODUS_PKGS)` -L./third_party/giflib-5.2.1-dist/usr/local/lib/ ./third_party/giflib-5.2.1-dist/usr/local/lib/libgif.a -L./third_party/ffmpeg-4.3-dist/usr/local/lib/ -L./third_party/glfw-3.3.2-dist/usr/local/lib/ -lavcodec -lavutil -lswresample -pthread -lm -llzma -lz -ldl
 VODUS_LIBS=`pkg-config --libs $(VODUS_PKGS)` -L./third_party/giflib-5.2.1-dist/usr/local/lib/ ./third_party/giflib-5.2.1-dist/usr/local/lib/libgif.a -L./third_party/ffmpeg-4.3-dist/usr/local/lib/ -L./third_party/glfw-3.3.2-dist/usr/local/lib/ -lavcodec -lavutil -lswresample -pthread -lm -llzma -lz -ldl

+ 1 - 1
README.md

@@ -15,7 +15,7 @@ changed at any moment or stop working at all.**
 #### Debian
 #### Debian
 
 
 ```console
 ```console
-$ sudo apt-get install nasm libfreetype6-dev libcurl4-openssl-dev libpcre2-dev
+$ sudo apt-get install nasm libfreetype6-dev libcurl4-openssl-dev
 ```
 ```
 
 
 #### NixOS
 #### NixOS

+ 0 - 3
src/vodus.cpp

@@ -7,9 +7,6 @@
 
 
 #include <algorithm>
 #include <algorithm>
 
 
-#define PCRE2_CODE_UNIT_WIDTH 8
-#include <pcre2.h>
-
 #include <ft2build.h>
 #include <ft2build.h>
 #include FT_FREETYPE_H
 #include FT_FREETYPE_H
 #include <gif_lib.h>
 #include <gif_lib.h>

+ 26 - 84
src/vodus_message.cpp

@@ -1,6 +1,8 @@
+using Timestamp = uint64_t;
+
 struct Message
 struct Message
 {
 {
-    uint64_t timestamp;
+    Timestamp timestamp;
     String_View nickname;
     String_View nickname;
     String_View message;
     String_View message;
 
 
@@ -167,69 +169,29 @@ struct Message_Buffer
     }
     }
 };
 };
 
 
-String_View get_substring_view_by_name(pcre2_code *re,
-                                       pcre2_match_data *match_data,
-                                       const char *name,
-                                       String_View subject)
+Timestamp chop_timestamp(String_View *input)
 {
 {
-    PCRE2_SIZE *ovector = pcre2_get_ovector_pointer(match_data);
-    int index = pcre2_substring_number_from_name(re, (PCRE2_SPTR) name);
-    const char* substring_start = subject.data + ovector[2*index];
-    size_t substring_length = ovector[2*index+1] - ovector[2*index];
-    return {substring_length, substring_start};
+    assert(0 && "TODO: chop_timestamp is not implemented");
+    return 0;
 }
 }
 
 
-uint64_t get_timestamp_from_match_data(pcre2_code *re,
-                                       pcre2_match_data *match_data,
-                                       String_View subject)
+String_View chop_nickname(String_View *input)
 {
 {
-    String_View hours = get_substring_view_by_name(re, match_data, "hours", subject);
-    String_View minutes = get_substring_view_by_name(re, match_data, "minutes", subject);
-    String_View seconds = get_substring_view_by_name(re, match_data, "seconds", subject);
-    String_View mseconds = get_substring_view_by_name(re, match_data, "milliseconds", subject);
-
-    uint64_t mseconds_value = 0;
-    for (size_t i = 0; i < 3; ++i) {
-        uint64_t x = 0;
-        if (mseconds.count > 0) {
-            x = *mseconds.data - '0';
-            mseconds.chop(1);
-        }
-        mseconds_value = mseconds_value * 10 + x;
-    }
-
-    const uint64_t timestamp =
-        (hours.as_integer<uint64_t>().unwrap * 60 * 60 +
-         minutes.as_integer<uint64_t>().unwrap * 60 +
-         seconds.as_integer<uint64_t>().unwrap) * 1000 +
-        mseconds_value;
-
-    return timestamp;
+    assert(0 && "TODO: chop_nickname is not implemented");
+    return {};
 }
 }
 
 
-size_t parse_messages_from_string_view(String_View input, Message **messages, Video_Params params, const char *input_filepath)
+String_View chop_message(String_View *input)
 {
 {
-    int errorcode = 0;
-    PCRE2_SIZE erroroffset = 0;
-    pcre2_code *re = pcre2_compile(
-        (PCRE2_SPTR) params.message_regex.data,
-        params.message_regex.count, 0,
-        &errorcode,
-        &erroroffset,
-        NULL);
-
-    if (re == NULL) {
-        PCRE2_UCHAR buffer[256];
-        pcre2_get_error_message(errorcode, buffer, sizeof(buffer));
-        // TODO(#136): better PCRE2 compilation errors
-        printf("PCRE2 compilation of message_regex failed at offset %d: %s\n", (int)erroroffset, buffer);
-        exit(1);
-    }
-    defer(pcre2_code_free(re));
-
-    pcre2_match_data *match_data = pcre2_match_data_create_from_pattern(re, NULL);
-    defer(pcre2_match_data_free(match_data));
+    assert(0 && "TODO: chop_message is not implemented");
+    return {};
+}
 
 
+size_t parse_messages_from_string_view(String_View input,
+                                       Message **messages,
+                                       Video_Params params,
+                                       const char *input_filepath)
+{
     size_t expected_messages_size = input.count_chars('\n') + 1;
     size_t expected_messages_size = input.count_chars('\n') + 1;
     if (params.messages_limit.has_value) {
     if (params.messages_limit.has_value) {
         expected_messages_size = min(expected_messages_size, params.messages_limit.unwrap);
         expected_messages_size = min(expected_messages_size, params.messages_limit.unwrap);
@@ -238,36 +200,15 @@ size_t parse_messages_from_string_view(String_View input, Message **messages, Vi
     *messages = new Message[expected_messages_size];
     *messages = new Message[expected_messages_size];
 
 
     size_t messages_size = 0;
     size_t messages_size = 0;
-    for (size_t line_number = 1; input.count > 0 && messages_size < expected_messages_size; ++line_number) {
+    for (size_t line_number = 1;
+         input.count > 0 && messages_size < expected_messages_size;
+         ++line_number)
+    {
         String_View message = input.chop_by_delim('\n');
         String_View message = input.chop_by_delim('\n');
 
 
-        int rc = pcre2_match(
-            re,                           /* the compiled pattern */
-            (PCRE2_SPTR) message.data,    /* the subject string */
-            message.count,                /* the length of the subject */
-            0,                            /* start at offset 0 in the subject */
-            0,                            /* default options */
-            match_data,                   /* block for storing the result */
-            NULL);                        /* use default match context */
-
-        if (rc < 0) {
-            print(stderr, input_filepath, ":", line_number, ": ");
-
-            switch(rc) {
-            case PCRE2_ERROR_NOMATCH:
-                println(stderr, "message_regex did not match this line");
-                break;
-            default:
-                println(stderr, "Matching error ", rc);
-                break;
-            }
-
-            exit(1);
-        }
-
-        (*messages)[messages_size].timestamp = get_timestamp_from_match_data(re, match_data, message);
-        (*messages)[messages_size].nickname = get_substring_view_by_name(re, match_data, "nickname", message);
-        (*messages)[messages_size].message = get_substring_view_by_name(re, match_data, "message", message).trim();
+        (*messages)[messages_size].timestamp = chop_timestamp(&message);
+        (*messages)[messages_size].nickname  = chop_nickname(&message);
+        (*messages)[messages_size].message   = chop_message(&message);
         messages_size++;
         messages_size++;
     }
     }
 
 
@@ -275,5 +216,6 @@ size_t parse_messages_from_string_view(String_View input, Message **messages, Vi
               [](const Message &m1, const Message &m2) {
               [](const Message &m1, const Message &m2) {
                   return m1.timestamp < m2.timestamp;
                   return m1.timestamp < m2.timestamp;
               });
               });
+
     return messages_size;
     return messages_size;
 }
 }

+ 0 - 5
src/vodus_video_params.cpp

@@ -38,7 +38,6 @@ void print1(FILE *stream, Video_Params params)
     println(stream, "    .bitrate = ", params.bitrate);
     println(stream, "    .bitrate = ", params.bitrate);
     println(stream, "    .font = ", params.font);
     println(stream, "    .font = ", params.font);
     println(stream, "    .message_limit = ", params.messages_limit);
     println(stream, "    .message_limit = ", params.messages_limit);
-    println(stream, "    .message_regex = ", params.message_regex);
     print(stream, "}");
     print(stream, "}");
 }
 }
 
 
@@ -55,8 +54,6 @@ Video_Params default_video_params() {
     params.bitrate           = 400'000;
     params.bitrate           = 400'000;
     params.font              = ""_sv;
     params.font              = ""_sv;
     params.messages_limit    = {};
     params.messages_limit    = {};
-
-    params.message_regex     = "\\[(?<hours>\\d+):(?<minutes>\\d+):(?<seconds>\\d+)(\\.(?<milliseconds>\\d+))?\\] \\<(?<nickname>.+?)\\> (?<message>.*)"_sv;
     return params;
     return params;
 }
 }
 
 
@@ -174,8 +171,6 @@ void patch_video_params_from_flag(Video_Params *params, String_View flag, String
         params->font = value;
         params->font = value;
     } else if (flag == "messages_limit"_sv || flag == "messages-limit"_sv) {
     } else if (flag == "messages_limit"_sv || flag == "messages-limit"_sv) {
         params->messages_limit = {true, parse_integer_flag<size_t>(flag, value)};
         params->messages_limit = {true, parse_integer_flag<size_t>(flag, value)};
-    } else if (flag == "message_regex"_sv || flag == "message-regex"_sv) {
-        params->message_regex = value;
     } else if (flag == "output_type"_sv || flag == "output-type"_sv) {
     } else if (flag == "output_type"_sv || flag == "output-type"_sv) {
         if (value == "video"_sv) {
         if (value == "video"_sv) {
             params->output_type = Output_Type::Video;
             params->output_type = Output_Type::Video;

+ 0 - 1
src/vodus_video_params.hpp

@@ -21,7 +21,6 @@ struct Video_Params
     int bitrate;
     int bitrate;
     String_View font;
     String_View font;
     Maybe<size_t> messages_limit;
     Maybe<size_t> messages_limit;
-    String_View message_regex;
 };
 };
 
 
 String_View param_names[] = {
 String_View param_names[] = {