luci: Remove jsmin from luci and use the jsmin Python module instead.
authorRISCi_ATOM <bob@bobcall.me>
Thu, 30 Sep 2021 21:11:38 +0000 (17:11 -0400)
committerRISCi_ATOM <bob@bobcall.me>
Thu, 30 Sep 2021 21:11:38 +0000 (17:11 -0400)
The project is being forced to remove jsmin from luci due to it being under the infamous JSON license.
This commit removes jsmin and, as a result, the jsmin Python module will need to be installed
in order to build libreCMC / luci.

include/prereq-build.mk
package/luci/luci.mk
package/luci/modules/luci-base/Makefile
package/luci/modules/luci-base/src/Makefile
package/luci/modules/luci-base/src/jsmin.c [deleted file]

index e3614f51eee6a1ce801f946dd2402bdc2064ad03..29960b148f2ac062ad5657b254b6dbda73e8ff9c 100644 (file)
@@ -151,6 +151,10 @@ $(eval $(call SetupHostCommand,python,Please install Python >= 3.5, \
        python3.5 -V 2>&1 | grep 'Python 3', \
        python3 -V 2>&1 | grep -E 'Python 3\.[5-9]\.?'))
 
+$(eval $(call TestHostCommand,python3-jsmin, \
+        Please install the jsmin Python module, \
+        python3 -c "import jsmin" 2>&1 ))
+
 $(eval $(call SetupHostCommand,git,Please install Git (git-core) >= 1.7.12.2, \
        git --exec-path | xargs -I % -- grep -q -- --recursive %/git-submodule))
 
index bb8ba8e5fd2513374fbe5147fa75eb4212319673..ba09387db1f473b0e96bd64c54ec1eb56c8e6d82 100644 (file)
@@ -169,7 +169,7 @@ endef
 
 define JsMin
        $(FIND) $(1) -type f -name '*.js' | while read src; do \
-               if jsmin < "$$$$src" > "$$$$src.o"; \
+               if python3 -m jsmin "$$$$src" > "$$$$src.o"; \
                then mv "$$$$src.o" "$$$$src"; fi; \
        done
 endef
index 9bc8ec17a173fb5d574aea10abce595e558a4b51..06ee7985ebff02b7df63694f892031b5467ac818 100644 (file)
@@ -36,14 +36,13 @@ define Host/Configure
 endef
 
 define Host/Compile
-       $(MAKE) -C src/ clean po2lmo jsmin
+       $(MAKE) -C src/ clean po2lmo
 endef
 
 define Host/Install
        $(INSTALL_DIR) $(1)/bin
        $(INSTALL_DIR) $(1)/lib/lua/5.1
        $(INSTALL_BIN) src/po2lmo $(1)/bin/po2lmo
-       $(INSTALL_BIN) src/jsmin $(1)/bin/jsmin
        $(INSTALL_BIN) $(HOST_BUILD_DIR)/bin/luasrcdiet $(1)/bin/luasrcdiet
        $(CP) $(HOST_BUILD_DIR)/luasrcdiet $(1)/lib/lua/5.1/
 endef
index 3e6ead10859da2cae20d4348a0850601d63c545e..03e887e1d5dc7d28390a4b11717fd15a1f74a2b9 100644 (file)
@@ -4,9 +4,6 @@
 clean:
        rm -f po2lmo parser.so version.lua *.o
 
-jsmin: jsmin.o
-       $(CC) $(LDFLAGS) -o $@ $^
-
 po2lmo: po2lmo.o template_lmo.o
        $(CC) $(LDFLAGS) -o $@ $^
 
diff --git a/package/luci/modules/luci-base/src/jsmin.c b/package/luci/modules/luci-base/src/jsmin.c
deleted file mode 100644 (file)
index d23718d..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-/* jsmin.c
-   2011-09-30
-
-Copyright (c) 2002 Douglas Crockford  (www.crockford.com)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-
-static int   theA;
-static int   theB;
-static int   theLookahead = EOF;
-
-
-/* isAlphanum -- return true if the character is a letter, digit, underscore,
-        dollar sign, or non-ASCII character.
-*/
-
-static int
-isAlphanum(int c)
-{
-    return ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') ||
-        (c >= 'A' && c <= 'Z') || c == '_' || c == '$' || c == '\\' ||
-        c > 126);
-}
-
-
-/* get -- return the next character from stdin. Watch out for lookahead. If
-        the character is a control character, translate it to a space or
-        linefeed.
-*/
-
-static int
-get()
-{
-    int c = theLookahead;
-    theLookahead = EOF;
-    if (c == EOF) {
-        c = getc(stdin);
-    }
-    if (c >= ' ' || c == '\n' || c == EOF) {
-        return c;
-    }
-    if (c == '\r') {
-        return '\n';
-    }
-    return ' ';
-}
-
-
-/* peek -- get the next character without getting it.
-*/
-
-static int
-peek()
-{
-    theLookahead = get();
-    return theLookahead;
-}
-
-
-/* next -- get the next character, excluding comments. peek() is used to see
-        if a '/' is followed by a '/' or '*'.
-*/
-
-static int
-next()
-{
-    int c = get();
-    if  (c == '/') {
-        switch (peek()) {
-        case '/':
-            for (;;) {
-                c = get();
-                if (c <= '\n') {
-                    return c;
-                }
-            }
-        case '*':
-            get();
-            for (;;) {
-                switch (get()) {
-                case '*':
-                    if (peek() == '/') {
-                        get();
-                        return ' ';
-                    }
-                    break;
-                case EOF:
-                    fprintf(stderr, "Error: JSMIN Unterminated comment.\n");
-                    exit(1);
-                }
-            }
-        default:
-            return c;
-        }
-    }
-    return c;
-}
-
-
-/* action -- do something! What you do is determined by the argument:
-        1   Output A. Copy B to A. Get the next B.
-        2   Copy B to A. Get the next B. (Delete A).
-        3   Get the next B. (Delete B).
-   action treats a string as a single character. Wow!
-   action recognizes a regular expression if it is preceded by ( or , or =.
-*/
-
-static void
-action(int d)
-{
-    switch (d) {
-    case 1:
-        putc(theA, stdout);
-    case 2:
-        theA = theB;
-        if (theA == '\'' || theA == '"' || theA == '`') {
-            for (;;) {
-                putc(theA, stdout);
-                theA = get();
-                if (theA == theB) {
-                    break;
-                }
-                if (theA == '\\') {
-                    putc(theA, stdout);
-                    theA = get();
-                }
-                if (theA == EOF) {
-                    fprintf(stderr, "Error: JSMIN unterminated string literal.");
-                    exit(1);
-                }
-            }
-        }
-    case 3:
-        theB = next();
-        if (theB == '/' && (theA == '(' || theA == ',' || theA == '=' ||
-                            theA == ':' || theA == '[' || theA == '!' ||
-                            theA == '&' || theA == '|' || theA == '?' ||
-                            theA == '{' || theA == '}' || theA == ';' ||
-                            theA == '\n')) {
-            putc(theA, stdout);
-            putc(theB, stdout);
-            for (;;) {
-                theA = get();
-                if (theA == '[') {
-                    for (;;) {
-                        putc(theA, stdout);
-                        theA = get();
-                        if (theA == ']') {
-                            break;
-                        }
-                        if (theA == '\\') {
-                            putc(theA, stdout);
-                            theA = get();
-                        }
-                        if (theA == EOF) {
-                            fprintf(stderr,
-                                "Error: JSMIN unterminated set in Regular Expression literal.\n");
-                            exit(1);
-                        }
-                    }
-                } else if (theA == '/') {
-                    break;
-                } else if (theA =='\\') {
-                    putc(theA, stdout);
-                    theA = get();
-                }
-                if (theA == EOF) {
-                    fprintf(stderr,
-                        "Error: JSMIN unterminated Regular Expression literal.\n");
-                    exit(1);
-                }
-                putc(theA, stdout);
-            }
-            theB = next();
-        }
-    }
-}
-
-
-/* jsmin -- Copy the input to the output, deleting the characters which are
-        insignificant to JavaScript. Comments will be removed. Tabs will be
-        replaced with spaces. Carriage returns will be replaced with linefeeds.
-        Most spaces and linefeeds will be removed.
-*/
-
-static void
-jsmin()
-{
-    theA = '\n';
-    action(3);
-    while (theA != EOF) {
-        switch (theA) {
-        case ' ':
-            if (isAlphanum(theB)) {
-                action(1);
-            } else {
-                action(2);
-            }
-            break;
-        case '\n':
-            switch (theB) {
-            case '{':
-            case '[':
-            case '(':
-            case '+':
-            case '-':
-                action(1);
-                break;
-            case ' ':
-                action(3);
-                break;
-            default:
-                if (isAlphanum(theB)) {
-                    action(1);
-                } else {
-                    action(2);
-                }
-            }
-            break;
-        default:
-            switch (theB) {
-            case ' ':
-                if (isAlphanum(theA)) {
-                    action(1);
-                    break;
-                }
-                action(3);
-                break;
-            case '\n':
-                switch (theA) {
-                case '}':
-                case ']':
-                case ')':
-                case '+':
-                case '-':
-                case '"':
-                case '\'':
-                case '`':
-                    action(1);
-                    break;
-                default:
-                    if (isAlphanum(theA)) {
-                        action(1);
-                    } else {
-                        action(3);
-                    }
-                }
-                break;
-            default:
-                action(1);
-                break;
-            }
-        }
-    }
-}
-
-
-/* main -- Output any command line arguments as comments
-        and then minify the input.
-*/
-extern int
-main(int argc, char* argv[])
-{
-    int i;
-    for (i = 1; i < argc; i += 1) {
-        fprintf(stdout, "// %s\n", argv[i]);
-    }
-    jsmin();
-    return 0;
-}