From 73a370af509dad6fe34701b239813116d33d3acb Mon Sep 17 00:00:00 2001 From: Tom spot Callaway Date: Fri, 1 Jul 2022 16:41:10 -0400 Subject: [PATCH] update rjsmin to 1.2.0 to see if Python 3.11 likes it better --- ...103.0.5060.53-update-rjsmin-to-1.2.0.patch | 1701 +++++++++++++++++ chromium.spec | 4 + 2 files changed, 1705 insertions(+) create mode 100644 chromium-103.0.5060.53-update-rjsmin-to-1.2.0.patch diff --git a/chromium-103.0.5060.53-update-rjsmin-to-1.2.0.patch b/chromium-103.0.5060.53-update-rjsmin-to-1.2.0.patch new file mode 100644 index 0000000..9ccd1a0 --- /dev/null +++ b/chromium-103.0.5060.53-update-rjsmin-to-1.2.0.patch @@ -0,0 +1,1701 @@ +diff -up chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.c.12 chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.c +--- chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.c.12 2022-06-28 12:50:10.167324583 +0000 ++++ chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.c 2021-11-14 19:50:55.000000000 +0000 +@@ -1,5 +1,5 @@ + /* +- * Copyright 2011 - 2015 ++ * Copyright 2011 - 2021 + * Andr\xe9 Malo or his licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); +@@ -18,21 +18,21 @@ + #include "cext.h" + EXT_INIT_FUNC; + +-#define RJSMIN_DULL_BIT (1 << 0) +-#define RJSMIN_PRE_REGEX_BIT (1 << 1) +-#define RJSMIN_REGEX_DULL_BIT (1 << 2) +-#define RJSMIN_REGEX_CC_DULL_BIT (1 << 3) +-#define RJSMIN_ID_LIT_BIT (1 << 4) +-#define RJSMIN_ID_LIT_O_BIT (1 << 5) +-#define RJSMIN_ID_LIT_C_BIT (1 << 6) +-#define RJSMIN_STRING_DULL_BIT (1 << 7) +-#define RJSMIN_SPACE_BIT (1 << 8) +-#define RJSMIN_POST_REGEX_OFF_BIT (1 << 9) ++#define RJSMIN_DULL_BIT (1 << 0) ++#define RJSMIN_PRE_REGEX_BIT (1 << 1) ++#define RJSMIN_REGEX_DULL_BIT (1 << 2) ++#define RJSMIN_REGEX_CC_DULL_BIT (1 << 3) ++#define RJSMIN_ID_LIT_BIT (1 << 4) ++#define RJSMIN_ID_LIT_O_BIT (1 << 5) ++#define RJSMIN_ID_LIT_C_BIT (1 << 6) ++#define RJSMIN_STRING_DULL_BIT (1 << 7) ++#define RJSMIN_SPACE_BIT (1 << 8) ++#define RJSMIN_POST_REGEX_OFF_BIT (1 << 9) ++#define RJSMIN_A_Z_BIT (1 << 10) + +-#ifdef EXT3 +-typedef Py_UNICODE rchar; +-#else + typedef unsigned char rchar; ++#ifdef U ++#undef U + #endif + #define U(c) ((rchar)(c)) + +@@ -66,66 +66,120 @@ typedef unsigned char rchar; + #define RJSMIN_IS_PRE_REGEX_1(c) ((U(c) <= 127) && \ + (rjsmin_charmask[U(c) & 0x7F] & RJSMIN_PRE_REGEX_BIT)) + ++#define RJSMIN_IS_A_Z(c) ((U(c) <= 127) && \ ++ (rjsmin_charmask[U(c) & 0x7F] & RJSMIN_A_Z_BIT)) ++ + + static const unsigned short rjsmin_charmask[128] = { +- 396, 396, 396, 396, 396, 396, 396, 396, +- 396, 396, 2, 396, 396, 2, 396, 396, +- 396, 396, 396, 396, 396, 396, 396, 396, +- 396, 396, 396, 396, 396, 396, 396, 396, +- 396, 687, 588, 653, 765, 653, 143, 588, +- 687, 205, 653, 237, 143, 237, 141, 648, +- 765, 765, 765, 765, 765, 765, 765, 765, +- 765, 765, 143, 143, 653, 143, 653, 143, +- 653, 765, 765, 765, 765, 765, 765, 765, +- 765, 765, 765, 765, 765, 765, 765, 765, +- 765, 765, 765, 765, 765, 765, 765, 765, +- 765, 765, 765, 683, 513, 197, 653, 765, +- 653, 765, 765, 765, 765, 765, 765, 765, +- 765, 765, 765, 765, 765, 765, 765, 765, +- 765, 765, 765, 765, 765, 765, 765, 765, +- 765, 765, 765, 687, 143, 207, 653, 765 ++ 396, 396, 396, 396, 396, 396, 396, 396, ++ 396, 396, 2, 396, 396, 2, 396, 396, ++ 396, 396, 396, 396, 396, 396, 396, 396, ++ 396, 396, 396, 396, 396, 396, 396, 396, ++ 396, 687, 588, 653, 765, 653, 143, 588, ++ 687, 205, 655, 239, 143, 239, 141, 648, ++ 765, 765, 765, 765, 765, 765, 765, 765, ++ 765, 765, 143, 143, 653, 143, 653, 143, ++ 653, 765, 765, 765, 765, 765, 765, 765, ++ 765, 765, 765, 765, 765, 765, 765, 765, ++ 765, 765, 765, 765, 765, 765, 765, 765, ++ 765, 765, 765, 683, 513, 197, 653, 765, ++ 588, 1789, 1789, 1789, 1789, 1789, 1789, 1789, ++ 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, ++ 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, ++ 1789, 1789, 1789, 687, 143, 207, 653, 765 + }; + ++ + static Py_ssize_t + rjsmin(const rchar *source, rchar *target, Py_ssize_t length, + int keep_bang_comments) + { +- const rchar *reset, *pcreset = NULL, *pctoken = NULL, *xtarget, +- *sentinel = source + length; +- rchar *tstart = target; +- int post_regex = 0; +- rchar c, quote, spaced = U(' '); ++ const rchar ++ *sentinel = source + length, /* never hit this pointer (source buf) */ ++ *reset, /* reset pointer (source buf) */ ++ *pcreset = NULL, /* pre-comment reset pointer (source buf) */ ++ *pctoken = NULL, /* pre-comment token pointer (target buf) ++ * Pointing to before the last kept comment, if any */ ++ *rsreset = NULL, /* regex-with-method reset pointer (source buf) */ ++ *xtarget; /* pre-regex-2 target pointer */ ++ ++ rchar *tstart = target, /* Target start pointer for reference */ ++ *rtreset = NULL; /* regex-with-method reset pointer (target buf) */ ++ ++ int rsdot, /* seen dot after regex-with-method pattern? */ ++ post_regex = 0; ++ rchar c, quote, ++ spaced = U(' '); /* the last seen kind of space (nl taking prio), ++ * init with ' ' */ + ++ /* main loop */ + while (source < sentinel) { + c = *source++; ++ + if (RJSMIN_IS_DULL(c)) { + if (post_regex) post_regex = 0; + if (pctoken) pctoken = NULL; + if (spaced == U('\n')) spaced = U(' '); ++ if (rsreset) { ++ /* both a-z and . are covered by "dull" */ ++ if (!rsdot) { ++ if (c != U('.')) { ++ /* reset regex-with-method to the starting slash */ ++ source = rsreset; ++ target = rtreset; ++ rsreset = NULL; ++ continue; /* main loop */ ++ } ++ /* Found a dot after possible regex, looking for a-z now */ ++ rsdot = 1; ++ } ++ else if (!RJSMIN_IS_A_Z(c)) { ++ /* reset regex-with-method to the starting slash */ ++ source = rsreset; ++ target = rtreset; ++ rsreset = NULL; ++ continue; /* main loop */ ++ } ++ else { ++ /* Successfull finish the regex-with-method match */ ++ rsreset = NULL; ++ } ++ } + + *target++ = c; +- continue; ++ continue; /* main loop */ + } ++ + switch (c) { + + /* String */ +- case U('\''): case U('"'): ++ case U('\''): case U('"'): case U('`'): + if (post_regex) post_regex = 0; + if (pctoken) pctoken = NULL; + if (spaced == U('\n')) spaced = U(' '); ++ if (rsreset) { ++ /* reset regex-with-method to the starting slash */ ++ source = rsreset; ++ target = rtreset; ++ rsreset = NULL; ++ continue; /* main loop */ ++ } + + reset = source; + *target++ = quote = c; ++ ++ /* string loop */ + while (source < sentinel) { + c = *source++; + *target++ = c; + if (RJSMIN_IS_STRING_DULL(c)) +- continue; ++ continue; /* string loop */ ++ + switch (c) { +- case U('\''): case U('"'): ++ case U('\''): case U('"'): case U('`'): + if (c == quote) +- goto cont; +- continue; ++ goto cont; /* main loop */ ++ continue; /* string loop */ + case U('\\'): + if (source < sentinel) { + c = *source++; +@@ -134,13 +188,18 @@ rjsmin(const rchar *source, rchar *targe + && *source == U('\n')) + *target++ = *source++; + } +- continue; ++ continue; /* string loop */ ++ case U('\r'): case U('\n'): ++ if (quote != U('`')) ++ break; /* string reset */ ++ continue; /* string loop */ + } +- break; ++ break; /* string reset */ + } ++ /* string reset */ + target -= source - reset; + source = reset; +- continue; ++ continue; /* main loop */ + + /* Comment or Regex or something else entirely */ + case U('/'): +@@ -148,6 +207,13 @@ rjsmin(const rchar *source, rchar *targe + if (post_regex) post_regex = 0; + if (pctoken) pctoken = NULL; + if (spaced == U('\n')) spaced = U(' '); ++ if (rsreset) { ++ /* reset regex-with-method to the starting slash */ ++ source = rsreset; ++ target = rtreset; ++ rsreset = NULL; ++ continue; /* main loop */ ++ } + + *target++ = c; + } +@@ -157,7 +223,19 @@ rjsmin(const rchar *source, rchar *targe + case U('*'): case U('/'): + goto skip_or_copy_ws; + ++ /* Regex or slash */ + default: ++ if (rsreset) { ++ /* reset regex-with-method to the starting slash */ ++ if (post_regex) post_regex = 0; ++ if (pctoken) pctoken = NULL; ++ if (spaced == U('\n')) spaced = U(' '); ++ source = rsreset; ++ target = rtreset; ++ rsreset = NULL; ++ continue; /* main loop */ ++ } ++ + xtarget = NULL; + if ( target == tstart + || RJSMIN_IS_PRE_REGEX_1(*((pctoken ? pctoken : target) +@@ -176,99 +254,148 @@ rjsmin(const rchar *source, rchar *targe + || !RJSMIN_IS_ID_LITERAL(*(xtarget - 7)) + ) + )) { +- +- /* Regex */ ++ /* nothing to do here, continuing down below ++ * We could unset rsreset here, but we know it already ++ * is. */ ++ ; ++ } ++ else if (*((pctoken ? pctoken : target) - 1) == U(')')) { ++ xtarget = NULL; ++ rsreset = source; ++ rtreset = target + 1; ++ rsdot = 0; ++ } ++ else { ++ /* Just a slash */ + if (post_regex) post_regex = 0; + if (pctoken) pctoken = NULL; ++ if (spaced == U('\n')) spaced = U(' '); + +- reset = source; +- if (spaced == U('\n')) { +- spaced = U(' '); +- if (xtarget) +- *target++ = U('\n'); +- } ++ *target++ = c; ++ continue; /* main loop */ ++ } + +- *target++ = U('/'); +- while (source < sentinel) { +- c = *source++; +- *target++ = c; +- if (RJSMIN_IS_REGEX_DULL(c)) +- continue; +- switch (c) { +- case U('/'): +- post_regex = 1; +- goto cont; +- case U('\\'): +- if (source < sentinel) { +- c = *source++; +- *target++ = c; +- if (c == U('\r') || c == U('\n')) +- break; +- } +- continue; +- case U('['): +- while (source < sentinel) { +- c = *source++; +- *target++ = c; +- if (RJSMIN_IS_REGEX_CC_DULL(c)) +- continue; +- switch (c) { +- case U('\\'): +- if (source < sentinel) { +- c = *source++; +- *target++ = c; +- if (c == U('\r') || c == U('\n')) +- break; +- } +- continue; +- case U(']'): +- goto cont_regex; ++ if (post_regex) post_regex = 0; ++ if (pctoken) pctoken = NULL; ++ ++ reset = source; ++ if (spaced == U('\n')) { ++ spaced = U(' '); ++ if (xtarget) ++ *target++ = U('\n'); ++ } ++ ++ *target++ = U('/'); ++ ++ /* regex loop */ ++ while (source < sentinel) { ++ c = *source++; ++ *target++ = c; ++ ++ if (RJSMIN_IS_REGEX_DULL(c)) ++ continue; /* regex loop */ ++ ++ switch (c) { ++ case U('/'): ++ while (source < sentinel ++ && RJSMIN_IS_A_Z(*source)) ++ *target++ = *source++; ++ post_regex = !rsreset; ++ /* This check is supposed to make it faster. ++ * It doesn't. It slows it down. I wonder why... ++ */ ++ /* ++ * if (!post_regex ++ * && source < sentinel - 1 ++ * && *source == U('.') ++ * && RJSMIN_IS_A_Z(*(source + 1))) ++ * rsreset = NULL; ++ */ ++ ++ goto cont; /* main loop */ ++ ++ case U('\\'): ++ if (source < sentinel) { ++ c = *source++; ++ *target++ = c; ++ if (c == U('\r') || c == U('\n')) ++ break; /* regex reset */ ++ } ++ continue; /* regex loop */ ++ ++ case U('['): ++ /* regex CC loop */ ++ while (source < sentinel) { ++ c = *source++; ++ *target++ = c; ++ ++ if (RJSMIN_IS_REGEX_CC_DULL(c)) ++ continue; /* regex CC loop */ ++ ++ switch (c) { ++ case U('\\'): ++ if (source < sentinel) { ++ c = *source++; ++ *target++ = c; ++ if (c == U('\r') || c == U('\n')) ++ break; /* regex reset */ + } ++ continue; /* regex CC loop */ ++ ++ case U(']'): ++ goto cont_regex; /* regex loop */ + } +- break; + } +- break; +- cont_regex: +- continue; ++ break; /* regex reset */ ++ + } +- target -= source - reset; +- source = reset; +- } +- else { +- /* Just a slash */ +- if (post_regex) post_regex = 0; +- if (pctoken) pctoken = NULL; +- if (spaced == U('\n')) spaced = U(' '); ++ break; /* regex reset */ + +- *target++ = c; ++ cont_regex: ++ continue; /* regex loop */ + } +- continue; ++ ++ /* regex reset */ ++ target -= source - reset; ++ source = reset; ++ rsreset = NULL; ++ continue; /* main loop */ + } + } +- continue; ++ continue; /* main loop */ /* LCOV_EXCL_LINE */ + + /* Whitespace */ + default: + skip_or_copy_ws: ++ /* remember if we've seen a newline, start with: no */ + quote = U(' '); + --source; ++ ++ /* space loop */ + while (source < sentinel) { + c = *source++; + if (RJSMIN_IS_SPACE(c)) +- continue; ++ continue; /* space loop */ ++ + switch (c) { + case U('\r'): case U('\n'): + quote = U('\n'); +- continue; ++ continue; /* space loop */ ++ ++ /* Can only be a comment at this point ++ * (or ending prematurely) */ + case U('/'): + if (source < sentinel) { + switch (*source) { ++ ++ /* multiline comment */ + case U('*'): + reset = source++; + /* copy bang comment, if requested */ + if ( keep_bang_comments && source < sentinel + && *source == U('!')) { + if (!pctoken) { ++ /* Backtracking if ending prematurely */ + pctoken = target; + pcreset = reset; + } +@@ -276,6 +403,8 @@ rjsmin(const rchar *source, rchar *targe + *target++ = U('/'); + *target++ = U('*'); + *target++ = *source++; ++ ++ /* comment loop */ + while (source < sentinel) { + c = *source++; + *target++ = c; +@@ -283,20 +412,21 @@ rjsmin(const rchar *source, rchar *targe + && *source == U('/')) { + *target++ = *source++; + reset = NULL; +- break; ++ break; /* continue space loop */ + } + } + if (!reset) +- continue; ++ continue; /* space loop */ + ++ /* comment reset */ + target -= source - reset; + source = reset; + if (pcreset == reset) { + pctoken = NULL; + pcreset = NULL; + } +- + } ++ + /* strip regular comment */ + else { + while (source < sentinel) { +@@ -305,41 +435,52 @@ rjsmin(const rchar *source, rchar *targe + && *source == U('/')) { + ++source; + reset = NULL; +- break; ++ break; /* continue space loop */ + } + } + if (!reset) +- continue; ++ continue; /* space loop */ ++ ++ /* comment reset: fallback to slash */ + source = reset; + *target++ = U('/'); + } +- goto cont; ++ goto cont; /* main loop */ ++ ++ /* single line comment */ + case U('/'): + ++source; ++ ++ /* single line comment loop */ + while (source < sentinel) { + c = *source++; + switch (c) { + case U('\n'): +- break; ++ break; /* continue space loop */ ++ + case U('\r'): + if (source < sentinel + && *source == U('\n')) + ++source; +- break; ++ break; /* continue space loop */ ++ + default: +- continue; ++ continue; /* single line comment loop */ + } +- break; ++ break; /* continue space loop */ + } + quote = U('\n'); +- continue; ++ continue; /* space loop */ + } + } + } ++ ++ /* No more spacy character found */ + --source; +- break; ++ break; /* end space loop */ + } + ++ /* Copy a space if needed */ + if ((tstart < (pctoken ? pctoken : target) && source < sentinel) + && ((quote == U('\n') + && ((RJSMIN_IS_ID_LITERAL_CLOSE(*((pctoken ? +@@ -363,8 +504,9 @@ rjsmin(const rchar *source, rchar *targe + pcreset = NULL; + spaced = quote; + } ++ + cont: +- continue; ++ continue; /* main loop */ + } + return (Py_ssize_t)(target - tstart); + } +@@ -385,15 +527,15 @@ substitution regex.\n\ + :Note: This is a hand crafted C implementation built on the regex\n\ + semantics.\n\ + \n\ +-:Parameters:\n\ +- `script` : ``str``\n\ ++Parameters:\n\ ++ script (str):\n\ + Script to minify\n\ + \n\ +- `keep_bang_comments` : ``bool``\n\ ++ keep_bang_comments (bool):\n\ + Keep comments starting with an exclamation mark? (``/*!...*/``)\n\ + \n\ +-:Return: Minified script\n\ +-:Rtype: ``str``"); ++Returns:\n\ ++ str: Minified script"); + + static PyObject * + rjsmin_jsmin(PyObject *self, PyObject *args, PyObject *kwds) +@@ -404,15 +546,15 @@ rjsmin_jsmin(PyObject *self, PyObject *a + int keep_bang_comments; + #ifdef EXT2 + int uni; +-#define UOBJ "O" + #endif + #ifdef EXT3 +-#define UOBJ "U" ++ int bytes; ++ rchar *bytescript; + #endif + +- if (!PyArg_ParseTupleAndKeywords(args, kwds, UOBJ "|O", kwlist, ++ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O", kwlist, + &script, &keep_bang_comments_)) +- return NULL; ++ LCOV_EXCL_LINE_RETURN(NULL); + + if (!keep_bang_comments_) + keep_bang_comments = 0; +@@ -425,28 +567,27 @@ rjsmin_jsmin(PyObject *self, PyObject *a + #ifdef EXT2 + if (PyUnicode_Check(script)) { + if (!(script = PyUnicode_AsUTF8String(script))) +- return NULL; ++ LCOV_EXCL_LINE_RETURN(NULL); + uni = 1; + } ++ else if (!PyString_Check(script)) { ++ PyErr_SetString(PyExc_TypeError, "Unexpected type"); ++ return NULL; ++ } + else { + if (!(script = PyObject_Str(script))) +- return NULL; ++ LCOV_EXCL_LINE_RETURN(NULL); + uni = 0; + } +-#endif +- +-#ifdef EXT3 +- Py_INCREF(script); +-#define PyString_GET_SIZE PyUnicode_GET_SIZE +-#define PyString_AS_STRING PyUnicode_AS_UNICODE +-#define _PyString_Resize PyUnicode_Resize +-#define PyString_FromStringAndSize PyUnicode_FromUnicode +-#endif +- + slength = PyString_GET_SIZE(script); ++ + if (!(result = PyString_FromStringAndSize(NULL, slength))) { ++ LCOV_EXCL_START ++ + Py_DECREF(script); + return NULL; ++ ++ LCOV_EXCL_STOP + } + Py_BEGIN_ALLOW_THREADS + length = rjsmin((rchar *)PyString_AS_STRING(script), +@@ -456,30 +597,97 @@ rjsmin_jsmin(PyObject *self, PyObject *a + + Py_DECREF(script); + if (length < 0) { ++ LCOV_EXCL_START ++ + Py_DECREF(result); + return NULL; ++ ++ LCOV_EXCL_STOP + } + if (length != slength && _PyString_Resize(&result, length) == -1) +- return NULL; ++ LCOV_EXCL_LINE_RETURN(NULL); + +-#ifdef EXT2 + if (uni) { + script = PyUnicode_DecodeUTF8(PyString_AS_STRING(result), + PyString_GET_SIZE(result), "strict"); + Py_DECREF(result); +- if (!script) +- return NULL; +- result = script; ++ return script; + } +-#endif ++ + return result; ++ ++#else /* EXT3 */ ++ ++ if (PyUnicode_Check(script)) { ++ bytes = 0; ++ script = PyUnicode_AsUTF8String(script); ++ bytescript = (rchar *)PyBytes_AS_STRING(script); ++ slength = PyBytes_GET_SIZE(script); ++ } ++ else if (PyBytes_Check(script)) { ++ bytes = 1; ++ Py_INCREF(script); ++ bytescript = (rchar *)PyBytes_AS_STRING(script); ++ slength = PyBytes_GET_SIZE(script); ++ } ++ else if (PyByteArray_Check(script)) { ++ bytes = 2; ++ Py_INCREF(script); ++ bytescript = (rchar *)PyByteArray_AS_STRING(script); ++ slength = PyByteArray_GET_SIZE(script); ++ } ++ else { ++ PyErr_SetString(PyExc_TypeError, "Unexpected type"); ++ return NULL; ++ } ++ ++ if (!(result = PyBytes_FromStringAndSize(NULL, slength))) { ++ LCOV_EXCL_START ++ ++ Py_DECREF(script); ++ return NULL; ++ ++ LCOV_EXCL_STOP ++ } ++ Py_BEGIN_ALLOW_THREADS ++ length = rjsmin(bytescript, (rchar *)PyBytes_AS_STRING(result), ++ slength, keep_bang_comments); ++ Py_END_ALLOW_THREADS ++ ++ Py_DECREF(script); ++ if (length < 0) { ++ LCOV_EXCL_START ++ ++ Py_DECREF(result); ++ return NULL; ++ ++ LCOV_EXCL_STOP ++ } ++ ++ if (!bytes) { ++ script = PyUnicode_DecodeUTF8(PyBytes_AS_STRING(result), length, ++ "strict"); ++ Py_DECREF(result); ++ return script; ++ } ++ if (bytes == 1) { ++ if (length != slength) { ++ _PyBytes_Resize(&result, length); ++ } ++ return result; ++ } ++ /* bytes == 2: bytearray */ ++ script = PyByteArray_FromStringAndSize(PyBytes_AS_STRING(result), length); ++ Py_DECREF(result); ++ return script; ++#endif + } + + /* ------------------------ BEGIN MODULE DEFINITION ------------------------ */ + + EXT_METHODS = { + {"jsmin", +- (PyCFunction)rjsmin_jsmin, METH_VARARGS | METH_KEYWORDS, ++ EXT_CFUNC(rjsmin_jsmin), METH_VARARGS | METH_KEYWORDS, + rjsmin_jsmin__doc__}, + + {NULL} /* Sentinel */ +@@ -499,10 +707,10 @@ EXT_INIT_FUNC { + + /* Create the module and populate stuff */ + if (!(m = EXT_CREATE(&EXT_DEFINE_VAR))) +- EXT_INIT_ERROR(NULL); ++ EXT_INIT_ERROR(LCOV_EXCL_LINE(NULL)); + + EXT_ADD_UNICODE(m, "__author__", "Andr\xe9 Malo", "latin-1"); +- EXT_ADD_STRING(m, "__docformat__", "restructuredtext en"); ++ EXT_ADD_STRING(m, "__version__", STRINGIFY(EXT_VERSION)); + + EXT_INIT_RETURN(m); + } +diff -up chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.py.12 chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.py +--- chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.py.12 2022-07-01 20:33:39.317727375 +0000 ++++ chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.py 2021-11-14 20:24:16.000000000 +0000 +@@ -1,6 +1,6 @@ + #!/usr/bin/env python + # -*- coding: ascii -*- +-r""" ++u""" + ===================== + Javascript Minifier + ===================== +@@ -11,7 +11,7 @@ The minifier is based on the semantics o + + :Copyright: + +- Copyright 2011 - 2015 ++ Copyright 2011 - 2021 + Andr\xe9 Malo or his licensors, as applicable + + :License: +@@ -39,9 +39,11 @@ same results as the original ``jsmin.c`` + - Newline characters are not allowed inside string and regex literals, except + for line continuations in string literals (ECMA-5). + - "return /regex/" is recognized correctly. ++- More characters are allowed before regexes. + - Line terminators after regex literals are handled more sensibly + - "+ +" and "- -" sequences are not collapsed to '++' or '--' + - Newlines before ! operators are removed more sensibly ++- (Unnested) template literals are supported (ECMA-6) + - Comments starting with an exclamation mark (``!``) can be kept optionally + - rJSmin does not handle streams, but only complete strings. (However, the + module provides a "streamy" interface). +@@ -56,20 +58,17 @@ file for details. + + rjsmin.c is a reimplementation of rjsmin.py in C and speeds it up even more. + +-Both python 2 and python 3 are supported. ++Supported python versions are 2.7 and 3.6+. + + .. _jsmin.c by Douglas Crockford: + http://www.crockford.com/javascript/jsmin.c + """ +-if __doc__: +- # pylint: disable = redefined-builtin +- __doc__ = __doc__.encode('ascii').decode('unicode_escape') +-__author__ = r"Andr\xe9 Malo".encode('ascii').decode('unicode_escape') +-__docformat__ = "restructuredtext en" ++__author__ = u"Andr\xe9 Malo" + __license__ = "Apache License, Version 2.0" +-__version__ = '1.0.12' ++__version__ = '1.2.0' + __all__ = ['jsmin'] + ++import functools as _ft + import re as _re + + +@@ -80,13 +79,13 @@ def _make_jsmin(python_only=False): + .. _jsmin.c by Douglas Crockford: + http://www.crockford.com/javascript/jsmin.c + +- :Parameters: +- `python_only` : ``bool`` ++ Parameters: ++ python_only (bool): + Use only the python variant. If true, the c extension is not even + tried to be loaded. + +- :Return: Minifier +- :Rtype: ``callable`` ++ Returns: ++ callable: Minifier + """ + # pylint: disable = unused-variable + # pylint: disable = too-many-locals +@@ -97,7 +96,10 @@ def _make_jsmin(python_only=False): + except ImportError: + pass + else: +- return _rjsmin.jsmin ++ # Ensure that the C version is in sync ++ # https://github.com/ndparker/rjsmin/issues/11 ++ if getattr(_rjsmin, '__version__', None) == __version__: ++ return _rjsmin.jsmin + try: + xrange + except NameError: +@@ -110,15 +112,16 @@ def _make_jsmin(python_only=False): + space_comment_nobang = r'(?:/\*(?!!)[^*]*\*+(?:[^/*][^*]*\*+)*/)' + bang_comment = r'(?:/\*![^*]*\*+(?:[^/*][^*]*\*+)*/)' + +- string1 = \ +- r'(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]|\r?\n|\r)[^\047\\\r\n]*)*\047)' ++ string1 = r"(?:'[^'\\\r\n]*(?:\\(?:[^\r\n]|\r?\n|\r)[^'\\\r\n]*)*')" ++ string1 = string1.replace("'", r'\047') # portability + string2 = r'(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]|\r?\n|\r)[^"\\\r\n]*)*")' +- string3 = r'(?:`(?:[^`\\]|\\.)*`)' ++ string3 = r'(?:`[^`\\]*(?:\\(?:[^\r\n]|\r?\n|\r)[^`\\]*)*`)' ++ string3 = string3.replace('`', r'\140') # portability + strings = r'(?:%s|%s|%s)' % (string1, string2, string3) + + charclass = r'(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\])' + nospecial = r'[^/\\\[\r\n]' +- regex = r'(?:/(?![\r\n/*])%s*(?:(?:\\[^\r\n]|%s)%s*)*/)' % ( ++ regex = r'(?:/(?![\r\n/*])%s*(?:(?:\\[^\r\n]|%s)%s*)*/[a-z]*)' % ( + nospecial, charclass, nospecial + ) + space = r'(?:%s|%s)' % (space_chars, space_comment) +@@ -154,7 +157,7 @@ def _make_jsmin(python_only=False): + ) for first, last in result]) # noqa + + return _re.sub( +- r'([\000-\040\047])', # \047 for better portability ++ r"([\000-\040'`])", # ' and ` for better portability + lambda m: '\\%03o' % ord(m.group(1)), ( + sequentize(result) + .replace('\\', '\\\\') +@@ -180,42 +183,48 @@ def _make_jsmin(python_only=False): + return r'[%s]' % fix_charclass(result) + + not_id_literal = not_id_literal_(r'[a-zA-Z0-9_$]') +- preregex1 = r'[(,=:\[!&|?{};\r\n]' ++ preregex1 = r'[(,=:\[!&|?{};\r\n+*-]' + preregex2 = r'%(not_id_literal)sreturn' % locals() + + id_literal = id_literal_(r'[a-zA-Z0-9_$]') + id_literal_open = id_literal_(r'[a-zA-Z0-9_${\[(!+-]') +- id_literal_close = id_literal_(r'[a-zA-Z0-9_$}\])"\047+-]') ++ id_literal_close = id_literal_(r'[a-zA-Z0-9_$}\])"\047\140+-]') + post_regex_off = id_literal_(r'[^\000-\040}\])?:|,;.&=+-]') + +- dull = r'[^\047"`/\000-\040]' ++ dull = r'[^\047"\140/\000-\040]' + + space_sub_simple = _re.compile(( +- # noqa pylint: disable = bad-continuation ++ # noqa pylint: disable = bad-option-value, bad-continuation + + r'(%(dull)s+)' # 0 + r'|(%(strings)s%(dull)s*)' # 1 +- r'|(?<=%(preregex1)s)' ++ r'|(?<=[)])' + r'%(space)s*(?:%(newline)s%(space)s*)*' + r'(%(regex)s)' # 2 +- r'(%(space)s*(?:%(newline)s%(space)s*)+' # 3 ++ r'(?=%(space)s*(?:%(newline)s%(space)s*)*' ++ r'\.' ++ r'%(space)s*(?:%(newline)s%(space)s*)*[a-z])' ++ r'|(?<=%(preregex1)s)' ++ r'%(space)s*(?:%(newline)s%(space)s*)*' ++ r'(%(regex)s)' # 3 ++ r'(%(space)s*(?:%(newline)s%(space)s*)+' # 4 + r'(?=%(post_regex_off)s))?' + r'|(?<=%(preregex2)s)' +- r'%(space)s*(?:(%(newline)s)%(space)s*)*' # 4 +- r'(%(regex)s)' # 5 +- r'(%(space)s*(?:%(newline)s%(space)s*)+' # 6 ++ r'%(space)s*(?:(%(newline)s)%(space)s*)*' # 5 ++ r'(%(regex)s)' # 6 ++ r'(%(space)s*(?:%(newline)s%(space)s*)+' # 7 + r'(?=%(post_regex_off)s))?' + r'|(?<=%(id_literal_close)s)' +- r'%(space)s*(?:(%(newline)s)%(space)s*)+' # 7 ++ r'%(space)s*(?:(%(newline)s)%(space)s*)+' # 8 + r'(?=%(id_literal_open)s)' +- r'|(?<=%(id_literal)s)(%(space)s)+(?=%(id_literal)s)' # 8 +- r'|(?<=\+)(%(space)s)+(?=\+)' # 9 +- r'|(?<=-)(%(space)s)+(?=-)' # 10 ++ r'|(?<=%(id_literal)s)(%(space)s)+(?=%(id_literal)s)' # 9 ++ r'|(?<=\+)(%(space)s)+(?=\+)' # 10 ++ r'|(?<=-)(%(space)s)+(?=-)' # 11 + r'|%(space)s+' + r'|(?:%(newline)s%(space)s*)+' + ) % locals()).sub + +- # print space_sub_simple.__self__.pattern ++ # print(space_sub_simple.__self__.pattern) + + def space_subber_simple(match): + """ Substitution callback """ +@@ -227,48 +236,56 @@ def _make_jsmin(python_only=False): + elif groups[1]: + return groups[1] + elif groups[2]: +- if groups[3]: +- return groups[2] + '\n' + return groups[2] +- elif groups[5]: ++ elif groups[3]: ++ if groups[4]: ++ return groups[3] + '\n' ++ return groups[3] ++ elif groups[6]: + return "%s%s%s" % ( +- groups[4] and '\n' or '', +- groups[5], +- groups[6] and '\n' or '', ++ groups[5] and '\n' or '', ++ groups[6], ++ groups[7] and '\n' or '', + ) +- elif groups[7]: ++ elif groups[8]: + return '\n' +- elif groups[8] or groups[9] or groups[10]: ++ elif groups[9] or groups[10] or groups[11]: + return ' ' + else: + return '' + + space_sub_banged = _re.compile(( +- # noqa pylint: disable = bad-continuation ++ # noqa pylint: disable = bad-option-value, bad-continuation + + r'(%(dull)s+)' # 0 + r'|(%(strings)s%(dull)s*)' # 1 +- r'|(?<=%(preregex1)s)' ++ r'|(?<=[)])' + r'(%(space)s*(?:%(newline)s%(space)s*)*)' # 2 + r'(%(regex)s)' # 3 +- r'(%(space)s*(?:%(newline)s%(space)s*)+' # 4 ++ r'(?=%(space)s*(?:%(newline)s%(space)s*)*' ++ r'\.' ++ r'%(space)s*(?:%(newline)s%(space)s*)*[a-z])' ++ r'|(?<=%(preregex1)s)' ++ r'(%(space)s*(?:%(newline)s%(space)s*)*)' # 4 ++ r'(%(regex)s)' # 5 ++ r'(%(space)s*(?:%(newline)s%(space)s*)+' # 6 + r'(?=%(post_regex_off)s))?' + r'|(?<=%(preregex2)s)' +- r'(%(space)s*(?:(%(newline)s)%(space)s*)*)' # 5, 6 +- r'(%(regex)s)' # 7 +- r'(%(space)s*(?:%(newline)s%(space)s*)+' # 8 ++ r'(%(space)s*(?:(%(newline)s)%(space)s*)*)' # 7, 8 ++ r'(%(regex)s)' # 9 ++ r'(%(space)s*(?:%(newline)s%(space)s*)+' # 10 + r'(?=%(post_regex_off)s))?' + r'|(?<=%(id_literal_close)s)' +- r'(%(space)s*(?:%(newline)s%(space)s*)+)' # 9 ++ r'(%(space)s*(?:%(newline)s%(space)s*)+)' # 11 + r'(?=%(id_literal_open)s)' +- r'|(?<=%(id_literal)s)(%(space)s+)(?=%(id_literal)s)' # 10 +- r'|(?<=\+)(%(space)s+)(?=\+)' # 11 +- r'|(?<=-)(%(space)s+)(?=-)' # 12 +- r'|(%(space)s+)' # 13 +- r'|((?:%(newline)s%(space)s*)+)' # 14 ++ r'|(?<=%(id_literal)s)(%(space)s+)(?=%(id_literal)s)' # 12 ++ r'|(?<=\+)(%(space)s+)(?=\+)' # 13 ++ r'|(?<=-)(%(space)s+)(?=-)' # 14 ++ r'|(%(space)s+)' # 15 ++ r'|((?:%(newline)s%(space)s*)+)' # 16 + ) % locals()).sub + +- # print space_sub_banged.__self__.pattern ++ # print(space_sub_banged.__self__.pattern) + + keep = _re.compile(( + r'%(space_chars)s+|%(space_comment_nobang)s+|%(newline)s+' +@@ -276,7 +293,7 @@ def _make_jsmin(python_only=False): + ) % locals()).sub + keeper = lambda m: m.groups()[0] or '' + +- # print keep.__self__.pattern ++ # print(keep.__self__.pattern) + + def space_subber_banged(match): + """ Substitution callback """ +@@ -288,26 +305,34 @@ def _make_jsmin(python_only=False): + elif groups[1]: + return groups[1] + elif groups[3]: +- return "%s%s%s%s" % ( ++ return "%s%s" % ( + keep(keeper, groups[2]), + groups[3], +- keep(keeper, groups[4] or ''), +- groups[4] and '\n' or '', + ) +- elif groups[7]: +- return "%s%s%s%s%s" % ( +- keep(keeper, groups[5]), ++ elif groups[5]: ++ return "%s%s%s%s" % ( ++ keep(keeper, groups[4]), ++ groups[5], ++ keep(keeper, groups[6] or ''), + groups[6] and '\n' or '', +- groups[7], +- keep(keeper, groups[8] or ''), +- groups[8] and '\n' or '', + ) + elif groups[9]: +- return keep(keeper, groups[9]) + '\n' +- elif groups[10] or groups[11] or groups[12]: +- return keep(keeper, groups[10] or groups[11] or groups[12]) or ' ' ++ return "%s%s%s%s%s" % ( ++ keep(keeper, groups[7]), ++ groups[8] and '\n' or '', ++ groups[9], ++ keep(keeper, groups[10] or ''), ++ groups[10] and '\n' or '', ++ ) ++ elif groups[11]: ++ return keep(keeper, groups[11]) + '\n' ++ elif groups[12] or groups[13] or groups[14]: ++ return keep(keeper, groups[12] or groups[13] or groups[14]) or ' ' + else: +- return keep(keeper, groups[13] or groups[14]) ++ return keep(keeper, groups[15] or groups[16]) ++ ++ banged = _ft.partial(space_sub_banged, space_subber_banged) ++ simple = _ft.partial(space_sub_simple, space_subber_simple) + + def jsmin(script, keep_bang_comments=False): + r""" +@@ -320,32 +345,51 @@ def _make_jsmin(python_only=False): + .. _jsmin.c by Douglas Crockford: + http://www.crockford.com/javascript/jsmin.c + +- :Parameters: +- `script` : ``str`` ++ Parameters: ++ script (str): + Script to minify + +- `keep_bang_comments` : ``bool`` ++ keep_bang_comments (bool): + Keep comments starting with an exclamation mark? (``/*!...*/``) + +- :Return: Minified script +- :Rtype: ``str`` ++ Returns: ++ str: Minified script + """ + # pylint: disable = redefined-outer-name + +- if keep_bang_comments: +- return space_sub_banged( +- space_subber_banged, '\n%s\n' % script +- ).strip() +- else: +- return space_sub_simple( +- space_subber_simple, '\n%s\n' % script +- ).strip() ++ is_bytes, script = _as_str(script) ++ script = (banged if keep_bang_comments else simple)( ++ '\n%s\n' % script ++ ).strip() ++ if is_bytes: ++ script = script.encode('latin-1') ++ if is_bytes == 2: ++ script = bytearray(script) ++ return script + + return jsmin + + jsmin = _make_jsmin() + + ++def _as_str(script): ++ """ Make sure the script is a text string """ ++ is_bytes = False ++ if str is bytes: ++ if not isinstance(script, basestring): # noqa pylint: disable = undefined-variable ++ raise TypeError("Unexpected type") ++ elif isinstance(script, bytes): ++ is_bytes = True ++ script = script.decode('latin-1') ++ elif isinstance(script, bytearray): ++ is_bytes = 2 ++ script = script.decode('latin-1') ++ elif not isinstance(script, str): ++ raise TypeError("Unexpected type") ++ ++ return is_bytes, script ++ ++ + def jsmin_for_posers(script, keep_bang_comments=False): + r""" + Minify javascript based on `jsmin.c by Douglas Crockford`_\. +@@ -361,49 +405,61 @@ def jsmin_for_posers(script, keep_bang_c + utilizes the resulting regexes. It's here for fun and may + vanish any time. Use the `jsmin` function instead. + +- :Parameters: +- `script` : ``str`` ++ Parameters: ++ script (str): + Script to minify + +- `keep_bang_comments` : ``bool`` ++ keep_bang_comments (bool): + Keep comments starting with an exclamation mark? (``/*!...*/``) + +- :Return: Minified script +- :Rtype: ``str`` ++ Returns: ++ str: Minified script + """ + if not keep_bang_comments: + rex = ( +- r'([^\047"/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]' +- r'|\r?\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]' +- r'|\r?\n|\r)[^"\\\r\n]*)*"))[^\047"/\000-\040]*)|(?<=[(,=:\[!&|?' +- r'{};\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*' +- r'][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\0' +- r'14\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*((?:/(?![\r' +- r'\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r' +- r'\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/))((?:[\000-\011\013\014' ++ r'([^\047"\140/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^' ++ r'\r\n]|\r?\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^' ++ r'\r\n]|\r?\n|\r)[^"\\\r\n]*)*")|(?:\140[^\140\\]*(?:\\(?:[^\r\n' ++ r']|\r?\n|\r)[^\140\\]*)*\140))[^\047"\140/\000-\040]*)|(?<=[)])' ++ r'(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+' ++ r')*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\0' ++ r'40]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*((?:/(?![\r\n/*])[^/' ++ r'\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]' ++ r'\r\n]*)*\]))[^/\\\[\r\n]*)*/[a-z]*))(?=(?:[\000-\011\013\014\0' ++ r'16-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r\n' ++ r']*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^' ++ r'/*][^*]*\*+)*/))*)*\.(?:[\000-\011\013\014\016-\040]|(?:/\*[^*' ++ r']*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\00' ++ r'0-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)' ++ r'*[a-z])|(?<=[(,=:\[!&|?{};\r\n+*-])(?:[\000-\011\013\014\016-' ++ r'\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)' ++ r'?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*]' ++ r'[^*]*\*+)*/))*)*((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|' ++ r'(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*' ++ r'/[a-z]*))((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/' ++ r'*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013' ++ r'\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000' ++ r'-\040&)+,.:;=?\]|}-]))?|(?<=[\000-#%-,./:-@\[-^\140{-~-]return' ++ r')(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*' ++ r'+)*/))*(?:((?:(?://[^\r\n]*)?[\r\n]))(?:[\000-\011\013\014\016' ++ r'-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*((?:/(?![\r\n/*])' ++ r'[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^' ++ r'\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/[a-z]*))((?:[\000-\011\013\014' + r'\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r' + r'\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:' +- r'[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)+,.:;=?\]|}-]))?|(?<=[\00' +- r'0-#%-,./:-@\[-^`{-~-]return)(?:[\000-\011\013\014\016-\040]|(?' +- r':/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?[\r\n]' +- r'))(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*' +- r'\*+)*/))*)*((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[' +- r'[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/))((' +- r'?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)' +- r'*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\04' +- r'0]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)+,.:;' +- r'=?\]|}-]))?|(?<=[^\000-!#%&(*,./:-@\[\\^`{|~])(?:[\000-\011\01' +- r'3\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:((?:(?:' +- r'//[^\r\n]*)?[\r\n]))(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]' +- r'*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040"#%-\047)*,./:-@\\-^' +- r'`|-~])|(?<=[^\000-#%-,./:-@\[-^`{-~-])((?:[\000-\011\013\014\0' +- r'16-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=[^\000-#%-,./' +- r':-@\[-^`{-~-])|(?<=\+)((?:[\000-\011\013\014\016-\040]|(?:/\*[' +- r'^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=\+)|(?<=-)((?:[\000-\011\013' +- r'\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=-)|(?:[' +- r'\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)' +- r')+|(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]' +- r'|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+' ++ r'[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)+,.:;=?\]|}-]))?|(?<=[^\0' ++ r'00-!#%&(*,./:-@\[\\^{|~])(?:[\000-\011\013\014\016-\040]|(?:/' ++ r'\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?[\r\n]))' ++ r'(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+' ++ r')*/))*)+(?=[^\000-\040"#%-\047)*,./:-@\\-^\140|-~])|(?<=[^\000' ++ r'-#%-,./:-@\[-^\140{-~-])((?:[\000-\011\013\014\016-\040]|(?:/' ++ r'\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=[^\000-#%-,./:-@\[-^\140{-' ++ r'~-])|(?<=\+)((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:' ++ r'[^/*][^*]*\*+)*/)))+(?=\+)|(?<=-)((?:[\000-\011\013\014\016-\0' ++ r'40]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=-)|(?:[\000-\011\0' ++ r'13\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+|(?:(?:(?' ++ r'://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]' ++ r'*\*+(?:[^/*][^*]*\*+)*/))*)+' + ) + + def subber(match): +@@ -412,59 +468,72 @@ def jsmin_for_posers(script, keep_bang_c + return ( + groups[0] or + groups[1] or +- (groups[3] and (groups[2] + '\n')) or + groups[2] or +- (groups[5] and "%s%s%s" % ( +- groups[4] and '\n' or '', +- groups[5], +- groups[6] and '\n' or '', ++ (groups[4] and (groups[3] + '\n')) or ++ groups[3] or ++ (groups[6] and "%s%s%s" % ( ++ groups[5] and '\n' or '', ++ groups[6], ++ groups[7] and '\n' or '', + )) or +- (groups[7] and '\n') or +- (groups[8] and ' ') or ++ (groups[8] and '\n') or + (groups[9] and ' ') or + (groups[10] and ' ') or ++ (groups[11] and ' ') or + '' + ) + else: + rex = ( +- r'([^\047"/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]' +- r'|\r?\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]' +- r'|\r?\n|\r)[^"\\\r\n]*)*"))[^\047"/\000-\040]*)|(?<=[(,=:\[!&|?' +- r'{};\r\n])((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/' +- r'*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013' +- r'\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*)((?:/(?!' +- r'[\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^' +- r'\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/))((?:[\000-\011\013\01' +- r'4\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^' ++ r'([^\047"\140/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^' ++ r'\r\n]|\r?\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^' ++ r'\r\n]|\r?\n|\r)[^"\\\r\n]*)*")|(?:\140[^\140\\]*(?:\\(?:[^\r\n' ++ r']|\r?\n|\r)[^\140\\]*)*\140))[^\047"\140/\000-\040]*)|(?<=[)])' ++ r'((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*' ++ r'+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-' ++ r'\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*)((?:/(?![\r\n/*])' ++ r'[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^' ++ r'\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/[a-z]*))(?=(?:[\000-\011\013\0' ++ r'14\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^' + r'\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(' +- r'?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)+,.:;=?\]|}-]))?|(?<=[' +- r'\000-#%-,./:-@\[-^`{-~-]return)((?:[\000-\011\013\014\016-\040' +- r']|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?[' +- r'\r\n]))(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][' +- r'^*]*\*+)*/))*)*)((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|' +- r'(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*' +- r'/))((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]' +- r'*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\01' +- r'6-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)' +- r'+,.:;=?\]|}-]))?|(?<=[^\000-!#%&(*,./:-@\[\\^`{|~])((?:[\000-' +- r'\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:' +- r'(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/' +- r'\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+)(?=[^\000-\040"#%-\047)*,./' +- r':-@\\-^`|-~])|(?<=[^\000-#%-,./:-@\[-^`{-~-])((?:[\000-\011\01' +- r'3\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=[^\000' +- r'-#%-,./:-@\[-^`{-~-])|(?<=\+)((?:[\000-\011\013\014\016-\040]|' +- r'(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=\+)|(?<=-)((?:[\000-\0' +- r'11\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=-' +- r')|((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*' +- r'\*+)*/))+)|((?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014' +- r'\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+)' ++ r'?:[^/*][^*]*\*+)*/))*)*\.(?:[\000-\011\013\014\016-\040]|(?:/' ++ r'\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?' ++ r':[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*' ++ r'/))*)*[a-z])|(?<=[(,=:\[!&|?{};\r\n+*-])((?:[\000-\011\013\014' ++ r'\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r' ++ r'\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:' ++ r'[^/*][^*]*\*+)*/))*)*)((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^' ++ r'\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r' ++ r'\n]*)*/[a-z]*))((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+' ++ r'(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\01' ++ r'1\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[' ++ r'^\000-\040&)+,.:;=?\]|}-]))?|(?<=[\000-#%-,./:-@\[-^\140{-~-]r' ++ r'eturn)((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][' ++ r'^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?[\r\n]))(?:[\000-\011\013\0' ++ r'14\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*)((?:/(?![' ++ r'\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^' ++ r'\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/[a-z]*))((?:[\000-\011' ++ r'\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(' ++ r'?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*' ++ r']*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)+,.:;=?\]|}-]))?|' ++ r'(?<=[^\000-!#%&(*,./:-@\[\\^{|~])((?:[\000-\011\013\014\016-\0' ++ r'40]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[' ++ r'\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^' ++ r'*]*\*+)*/))*)+)(?=[^\000-\040"#%-\047)*,./:-@\\-^\140|-~])|(?<' ++ r'=[^\000-#%-,./:-@\[-^\140{-~-])((?:[\000-\011\013\014\016-\040' ++ r']|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=[^\000-#%-,./:-@\[-^' ++ r'\140{-~-])|(?<=\+)((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*' ++ r'\*+(?:[^/*][^*]*\*+)*/))+)(?=\+)|(?<=-)((?:[\000-\011\013\014' ++ r'\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=-)|((?:[\00' ++ r'0-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)' ++ r'|((?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|' ++ r'(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+)' + ) + +- keep = _re.compile(( ++ keep = _re.compile( + r'[\000-\011\013\014\016-\040]+|(?:/\*(?!!)[^*]*\*+(?:[^/*][^*]*' + r'\*+)*/)+|(?:(?://[^\r\n]*)?[\r\n])+|((?:/\*![^*]*\*+(?:[^/*][^' + r'*]*\*+)*/)+)' +- ) % locals()).sub ++ ).sub + keeper = lambda m: m.groups()[0] or '' + + def subber(match): +@@ -473,27 +542,37 @@ def jsmin_for_posers(script, keep_bang_c + return ( + groups[0] or + groups[1] or +- (groups[3] and "%s%s%s%s" % ( ++ groups[3] and "%s%s" % ( + keep(keeper, groups[2]), + groups[3], +- keep(keeper, groups[4] or ''), +- groups[4] and '\n' or '', +- )) or +- (groups[7] and "%s%s%s%s%s" % ( +- keep(keeper, groups[5]), ++ ) or ++ groups[5] and "%s%s%s%s" % ( ++ keep(keeper, groups[4]), ++ groups[5], ++ keep(keeper, groups[6] or ''), + groups[6] and '\n' or '', +- groups[7], +- keep(keeper, groups[8] or ''), ++ ) or ++ groups[9] and "%s%s%s%s%s" % ( ++ keep(keeper, groups[7]), + groups[8] and '\n' or '', +- )) or +- (groups[9] and keep(keeper, groups[9] + '\n')) or +- (groups[10] and keep(keeper, groups[10]) or ' ') or +- (groups[11] and keep(keeper, groups[11]) or ' ') or +- (groups[12] and keep(keeper, groups[12]) or ' ') or +- keep(keeper, groups[13] or groups[14]) ++ groups[9], ++ keep(keeper, groups[10] or ''), ++ groups[10] and '\n' or '', ++ ) or ++ groups[11] and (keep(keeper, groups[11]) + '\n') or ++ groups[12] and (keep(keeper, groups[12]) or ' ') or ++ groups[13] and (keep(keeper, groups[13]) or ' ') or ++ groups[14] and (keep(keeper, groups[14]) or ' ') or ++ keep(keeper, groups[15] or groups[16]) + ) + +- return _re.sub(rex, subber, '\n%s\n' % script).strip() ++ is_bytes, script = _as_str(script) ++ script = _re.sub(rex, subber, '\n%s\n' % script).strip() ++ if is_bytes: ++ script = script.encode('latin-1') ++ if is_bytes == 2: ++ script = bytearray(script) ++ return script + + + if __name__ == '__main__': +diff -up chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/setup.py.12 chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/setup.py +--- chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/setup.py.12 2022-06-28 12:50:10.171324444 +0000 ++++ chromium-103.0.5060.53/third_party/catapult/common/py_vulcanize/third_party/rjsmin/setup.py 2021-11-05 17:03:12.000000000 +0000 +@@ -1,41 +1,264 @@ +-#!/usr/bin/python3 ++#!/usr/bin/env python + # -*- coding: ascii -*- +-# +-# Copyright 2006 - 2013 +-# Andr\xe9 Malo or his licensors, as applicable +-# +-# Licensed under the Apache License, Version 2.0 (the "License"); +-# you may not use this file except in compliance with the License. +-# You may obtain a copy of the License at +-# +-# http://www.apache.org/licenses/LICENSE-2.0 +-# +-# Unless required by applicable law or agreed to in writing, software +-# distributed under the License is distributed on an "AS IS" BASIS, +-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-# See the License for the specific language governing permissions and +-# limitations under the License. ++u""" ++:Copyright: + ++ Copyright 2011 - 2021 ++ Andr\xe9 Malo or his licensors, as applicable ++ ++:License: ++ ++ Licensed under the Apache License, Version 2.0 (the "License"); ++ you may not use this file except in compliance with the License. ++ You may obtain a copy of the License at ++ ++ http://www.apache.org/licenses/LICENSE-2.0 ++ ++ Unless required by applicable law or agreed to in writing, software ++ distributed under the License is distributed on an "AS IS" BASIS, ++ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ See the License for the specific language governing permissions and ++ limitations under the License. ++ ++=========================================== ++ rJSmin - A Javascript Minifier For Python ++=========================================== ++ ++rJSmin - A Javascript Minifier For Python. ++""" ++from __future__ import print_function ++__author__ = u"Andr\xe9 Malo" ++__docformat__ = "restructuredtext en" ++ ++import os as _os ++import posixpath as _posixpath + import sys as _sys +-from _setup import run + ++# pylint: disable = no-name-in-module, import-error, raise-missing-from ++import setuptools as _setuptools ++ ++# pylint: disable = invalid-name ++ ++ ++def _doc(filename): ++ """ Read docs file """ ++ # pylint: disable = unspecified-encoding ++ args = {} if str is bytes else dict(encoding='utf-8') ++ try: ++ with open(_os.path.join('docs', filename), **args) as fp: ++ return fp.read() ++ except IOError: ++ return None ++ ++ ++def _lines(multiline): ++ """ Split multiline string into single line % empty and comments """ ++ return [line for line in ( ++ line.strip() for line in multiline.splitlines(False) ++ ) if line and not line.startswith('#')] ++ ++ ++package = dict( ++ name='rjsmin', ++ top='.', ++ pathname='.', ++ provides=_doc('PROVIDES'), ++ desc=_doc('SUMMARY').strip(), ++ longdesc=_doc('DESCRIPTION'), ++ author=__author__, ++ email='nd@perlig.de', ++ license="Apache License, Version 2.0", ++ keywords=_lines(_doc('KEYWORDS')), ++ url='http://opensource.perlig.de/rjsmin/', ++ classifiers=_lines(_doc('CLASSIFIERS') or ''), ++ ++ packages=False, ++ py_modules=['rjsmin'], ++ version_file='rjsmin.py', ++ install_requires=[], ++) ++ ++ ++class BuildFailed(Exception): ++ """ The build has failed """ ++ ++ ++from distutils.command import build_ext as _build_ext # pylint: disable = wrong-import-order ++from distutils import errors as _errors # pylint: disable = wrong-import-order ++class build_ext(_build_ext.build_ext): # pylint: disable = no-init ++ """ Improved extension building code """ ++ ++ def run(self): ++ """ Unify exception """ ++ try: ++ _build_ext.build_ext.run(self) ++ except _errors.DistutilsPlatformError: ++ raise BuildFailed() ++ ++ ++ def build_extension(self, ext): ++ """ ++ Build C extension - with extended functionality + +-def setup(args=None, _manifest=0): +- """ Main setup function """ +- from _setup.ext import Extension ++ The following features are added here: + +- if 'java' in _sys.platform.lower(): +- # no c extension for jython +- ext = None ++ - The macros ``EXT_PACKAGE`` and ``EXT_MODULE`` will be filled (or ++ unset) depending on the extensions name, but only if they are not ++ already defined. ++ ++ - "." is added to the include directories (for cext.h) ++ ++ :Parameters: ++ `ext` : `Extension` ++ The extension to build ++ ++ :Return: whatever ``distutils.command.build_ext.build_ext`` returns ++ :Rtype: any ++ """ ++ # handle name macros ++ macros = dict(ext.define_macros or ()) ++ tup = ext.name.split('.') ++ if len(tup) == 1: ++ pkg, mod = None, tup[0] ++ else: ++ pkg, mod = '.'.join(tup[:-1]), tup[-1] ++ if pkg is not None and 'EXT_PACKAGE' not in macros: ++ ext.define_macros.append(('EXT_PACKAGE', pkg)) ++ if 'EXT_MODULE' not in macros: ++ ext.define_macros.append(('EXT_MODULE', mod)) ++ if pkg is None: ++ macros = dict(ext.undef_macros or ()) ++ if 'EXT_PACKAGE' not in macros: ++ ext.undef_macros.append('EXT_PACKAGE') ++ ++ import pprint; pprint.pprint(ext.__dict__) ++ try: ++ return _build_ext.build_ext.build_extension(self, ext) ++ except (_errors.CCompilerError, _errors.DistutilsExecError, ++ _errors.DistutilsPlatformError, IOError, ValueError): ++ raise BuildFailed() ++ ++ ++class Extension(_setuptools.Extension): ++ """ improved functionality """ ++ ++ def __init__(self, *args, **kwargs): ++ """ Initialization """ ++ version = kwargs.pop('version') ++ self.depends = [] ++ if 'depends' in kwargs: ++ self.depends = kwargs['depends'] ++ _setuptools.Extension.__init__(self, *args, **kwargs) ++ self.define_macros.append(('EXT_VERSION', version)) ++ ++ # add include path ++ included = '.' ++ if included not in self.include_dirs: ++ self.include_dirs.append(included) ++ ++ # add cext.h to the dependencies ++ cext_h = _posixpath.normpath(_posixpath.join(included, 'cext.h')) ++ for item in self.depends: ++ if _posixpath.normpath(item) == cext_h: ++ break ++ else: ++ self.depends.append(cext_h) ++ ++ ++EXTENSIONS = lambda v: [Extension('_rjsmin', ["rjsmin.c"], version=v)] ++ ++ ++def do_setup(cext): ++ """ Main """ ++ # pylint: disable = too-many-branches ++ # pylint: disable = unspecified-encoding ++ ++ args = {} if str is bytes else dict(encoding='utf-8') ++ version_file = '%s/%s' % (package['pathname'], ++ package.get('version_file', '__init__.py')) ++ with open(version_file, **args) as fp: ++ for line in fp: # pylint: disable = redefined-outer-name ++ if line.startswith('__version__'): ++ version = line.split('=', 1)[1].strip() ++ if version.startswith(("'", '"')): ++ version = version[1:-1].strip() ++ break ++ else: ++ raise RuntimeError("Version not found") ++ ++ kwargs = {} ++ ++ if not cext or 'java' in _sys.platform.lower(): ++ extensions = [] + else: +- ext=[Extension('_rjsmin', sources=['rjsmin.c'])] ++ extensions = EXTENSIONS(version) ++ ++ if extensions: ++ if 'build_ext' in globals(): ++ kwargs.setdefault('cmdclass', {})['build_ext'] = build_ext ++ kwargs['ext_modules'] = extensions ++ ++ cflags = None ++ if _os.environ.get('CFLAGS') is None: ++ from distutils import ccompiler as _ccompiler ++ ++ compiler = _ccompiler.get_default_compiler() ++ try: ++ with open("debug.%s.cflags" % compiler) as fp: ++ cflags = ' '.join([ ++ line for line in (line.strip() for line in fp) ++ if line and not line.startswith('#') ++ ]).split() or None ++ except IOError: ++ pass ++ ++ if cflags: ++ gcov = 'coverage' in ' '.join(cflags) ++ for ext in extensions: ++ # pylint: disable = attribute-defined-outside-init ++ ext.extra_compile_args = \ ++ getattr(ext, 'extra_compile_args', []) + cflags ++ if gcov: ++ ext.libraries.append('gcov') ++ ++ ++ if package.get('packages', True): ++ kwargs['packages'] = [package['top']] + [ ++ '%s.%s' % (package['top'], item) ++ for item in ++ _setuptools.find_packages(package['pathname']) ++ ] ++ if package.get('py_modules'): ++ kwargs['py_modules'] = package['py_modules'] + +- return run(script_args=args, ext=ext, manifest_only=_manifest) ++ _setuptools.setup( ++ name=package['name'], ++ author=package['author'], ++ author_email=package['email'], ++ license=package['license'], ++ classifiers=package['classifiers'], ++ description=package['desc'], ++ long_description=package['longdesc'], ++ url=package['url'], ++ install_requires=package['install_requires'], ++ version=version, ++ zip_safe=False, ++ **kwargs ++ ) + + +-def manifest(): +- """ Create List of packaged files """ +- return setup((), _manifest=1) ++def setup(): ++ """ Run setup """ ++ try: ++ do_setup(True) ++ except BuildFailed: ++ env = 'SETUP_CEXT_REQUIRED' ++ if _os.environ.get(env, '') not in ('', '0'): ++ raise ++ print("C extension build failed - building python only version now. " ++ "Set '%s' environment variable to '1' to make it fail." ++ % (env,), file=_sys.stderr) ++ do_setup(False) + + + if __name__ == '__main__': diff --git a/chromium.spec b/chromium.spec index 28a3bf5..c478af4 100644 --- a/chromium.spec +++ b/chromium.spec @@ -307,6 +307,9 @@ Patch67: chromium-98.0.4758.80-remoting-cstring.patch # Apply fix_textrels hack for i686 (even without lld) Patch68: chromium-84.0.4147.125-i686-fix_textrels.patch +# Update rjsmin to 1.2.0 +Patch69: chromium-103.0.5060.53-update-rjsmin-to-1.2.0.patch + # Do not download proprietary widevine module in the background (thanks Debian) Patch79: chromium-99.0.4844.51-widevine-no-download.patch @@ -1027,6 +1030,7 @@ udev. %patch66 -p1 -b .python3-do-not-use-deprecated-mode-U %patch67 -p1 -b .remoting-cstring %patch68 -p1 -b .i686-textrels +%patch69 -p1 -b .update-rjsmin-to-1.2.0 %patch79 -p1 -b .widevine-no-download %patch80 -p1 -b .EnumTable-crash # %%patch81 -p1 -b .gcc12fix