Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Codec Request: Jpegtran #64

Open
jahed opened this issue Oct 24, 2024 · 7 comments
Open

Codec Request: Jpegtran #64

jahed opened this issue Oct 24, 2024 · 7 comments
Labels
feature-request help wanted Extra attention is needed

Comments

@jahed
Copy link
Contributor

jahed commented Oct 24, 2024

Is your feature request related to a problem? Please describe.
I'd like to be able to optimise existing JPGs without re-encoding them and losing quality.

Describe the solution you'd like
jpegtran is a popular program to optimise JPGs. It's a part of libjpeg-turbo, so it's also available under mozjpeg. mozjpeg is already used in @jsquash/jpeg. So adding an optimise function export would make sense, similar to @jsquash/oxipng.

https://github.com/mozilla/mozjpeg/blob/master/jpegtran.c

jpegtran has a bunch of options, I typically use -optimize -copy none -progressive.

https://github.com/mozilla/mozjpeg/blob/master/jpegtran.1

Describe alternatives you've considered
jSquash is the only actively maintained library I've found that provides oxipng WASM builds with web browser support. It'd be perfect if it also provided a way to optimise JPGs. As far as I can tell, there's no actively maintained package for jpegtran WASM builds or any other package that can optimise JPGs like it can.

Additional context
n/a

@jamsinclair jamsinclair changed the title Support JPEG optimisation (jpegtran) Codec Request: Jpegtran Oct 28, 2024
@jamsinclair
Copy link
Owner

Brilliant suggestion @jahed.

I don't have time to work on this myself. I'd welcome someone to look into providing one and I am happy to help where I can! 🙇

@jamsinclair jamsinclair added the help wanted Extra attention is needed label Oct 28, 2024
@jahed
Copy link
Contributor Author

jahed commented Oct 28, 2024

Tried building the current jpeg codecs from a default GitHub Codespace, switched to Node 20 to match CI.

nvm use 20
cd packages/jpeg/codec
npm run build

WASM files are created, but terser via empscripten hits a null pointer.

TypeError: Cannot read property 'print' of undefined

Could be due to emscripten-core/emscripten#14525 which is fixed. emscripten-core/emscripten#13297 (comment)

I noticed there are few old/deprecated versions, like emsdk using Node 14. emsdk@v3 is out. So some version upgrades might help.

I'll take another look when I'm ready to integrate this feature. If anyone else wants to, feel free. I'm not familiar with C++/Emscripten or mozjpeg's source so I'd appreciate it.

Full build logs (click here)
> build
> ../../../tools/build-cpp.sh

BUILD_DIR: /workspaces/jSquash/packages/jpeg/codec
SCRIPTDIR: ../../../tools
[+] Building 285.3s (10/10) FINISHED                                                                                                                    docker:default
 => [internal] load build definition from Dockerfile                                                                                                              0.2s
 => => transferring dockerfile: 650B                                                                                                                              0.0s
 => [internal] load metadata for docker.io/emscripten/emsdk:2.0.34                                                                                                1.3s
 => [auth] emscripten/emsdk:pull token for registry-1.docker.io                                                                                                   0.0s
 => [internal] load .dockerignore                                                                                                                                 0.2s
 => => transferring context: 2B                                                                                                                                   0.0s
 => [1/5] FROM docker.io/emscripten/emsdk:2.0.34@sha256:3a5cec571c533e448f1d2bcba9757382f9122771e74394106c4acd6235b026f5                                         33.3s
 => => resolve docker.io/emscripten/emsdk:2.0.34@sha256:3a5cec571c533e448f1d2bcba9757382f9122771e74394106c4acd6235b026f5                                          0.1s
 => => sha256:3a5cec571c533e448f1d2bcba9757382f9122771e74394106c4acd6235b026f5 1.37kB / 1.37kB                                                                    0.0s
 => => sha256:0ac9bde0a632e05abca555563b3491dbf27ab0b2804d9c9ae59e85a6e6f5af0b 5.46kB / 5.46kB                                                                    0.0s
 => => sha256:f28b8bbe013da5b9c9a890722f2a251107522a2f24bfb02bcb48722f52e8e5f2 229.39MB / 229.39MB                                                                8.2s
 => => sha256:7b1a6ab2e44dbac178598dabe7cff59bd67233dba0b27e4fbd1f9d4b3c877a54 28.57MB / 28.57MB                                                                  1.2s
 => => sha256:e7ace8f8ceef2c779e9d25e50b0535b3f561b4352f46c6af6106d4c63054b7fe 5.15kB / 5.15kB                                                                    0.4s
 => => sha256:98819ffb6ec3d18d7a2414aa93f6532afb62d368c69dce0f37c3c9e2e0d47008 213.42MB / 213.42MB                                                                9.3s
 => => extracting sha256:7b1a6ab2e44dbac178598dabe7cff59bd67233dba0b27e4fbd1f9d4b3c877a54                                                                         1.1s
 => => sha256:1b912d00c70ed554e076aca86b945c925a62573686228eb22a9f57aec2ea68b3 126B / 126B                                                                        1.7s
 => => extracting sha256:f28b8bbe013da5b9c9a890722f2a251107522a2f24bfb02bcb48722f52e8e5f2                                                                         7.0s
 => => extracting sha256:e7ace8f8ceef2c779e9d25e50b0535b3f561b4352f46c6af6106d4c63054b7fe                                                                         0.0s
 => => extracting sha256:98819ffb6ec3d18d7a2414aa93f6532afb62d368c69dce0f37c3c9e2e0d47008                                                                         7.0s
 => => extracting sha256:1b912d00c70ed554e076aca86b945c925a62573686228eb22a9f57aec2ea68b3                                                                         0.0s
 => [2/5] RUN apt-get update && apt-get install -qqy autoconf libtool pkg-config                                                                                 11.1s
 => [3/5] RUN emcc -O3 -flto -std=c++17 -O3 -flto -s PTHREAD_POOL_SIZE=navigator.hardwareConcurrency -s FILESYSTEM=0 -s ALLOW_MEMORY_GROWTH=1 -s TEXTDECODER=0  115.7s 
 => [4/5] RUN emcc -O3 -flto -std=c++17 -O3 -flto -s PTHREAD_POOL_SIZE=navigator.hardwareConcurrency -s FILESYSTEM=0 -s ALLOW_MEMORY_GROWTH=1 -s TEXTDECODER=0  119.6s
 => [5/5] WORKDIR /src                                                                                                                                            0.3s
 => exporting to image                                                                                                                                            3.2s
 => => exporting layers                                                                                                                                           3.0s
 => => writing image sha256:d94f2f5d29261dd08e52907b263a44361a19e2a9818dcf717ab37e3528ae8500                                                                      0.0s
 => => naming to docker.io/library/jsquash-cpp-build                                                                                                              0.0s
make: make -j2
mkdir -p node_modules/mozjpeg
curl -sL https://github.com/mozilla/mozjpeg/archive/v3.3.1.tar.gz | tar xz --strip 1 -C node_modules/mozjpeg
cd node_modules/mozjpeg && autoreconf -iv
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal 
autoreconf: configure.ac: tracing
autoreconf: running: libtoolize --copy
libtoolize: putting auxiliary files in '.'.
libtoolize: copying file './ltmain.sh'
libtoolize: Consider adding 'AC_CONFIG_MACRO_DIRS([m4])' to configure.ac,
libtoolize: and rerunning libtoolize and aclocal.
libtoolize: Consider adding '-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
autoreconf: running: /usr/bin/autoconf
autoreconf: running: /usr/bin/autoheader
autoreconf: running: automake --add-missing --copy --no-force
configure.ac:18: installing './ar-lib'
configure.ac:16: installing './compile'
configure.ac:23: installing './config.guess'
configure.ac:23: installing './config.sub'
configure.ac:8: installing './install-sh'
configure.ac:8: installing './missing'
Makefile.am: installing './depcomp'
autoreconf: Leaving directory `.'
cd node_modules/mozjpeg && ./configure \
        --disable-shared \
        --without-turbojpeg \
        --without-simd \
        --without-arith-enc \
        --without-arith-dec \
        --with-build-date=jsquash
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking whether make supports the include directive... yes (GNU style)
checking for gcc... /emsdk/upstream/emscripten/emcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether /emsdk/upstream/emscripten/emcc accepts -g... yes
checking for /emsdk/upstream/emscripten/emcc option to accept ISO C89... none needed
checking whether /emsdk/upstream/emscripten/emcc understands -c and -o together... yes
checking dependency style of /emsdk/upstream/emscripten/emcc... gcc3
checking how to run the C preprocessor... /emsdk/upstream/emscripten/emcc -E
checking for gcc... (cached) /emsdk/upstream/emscripten/emcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether /emsdk/upstream/emscripten/emcc accepts -g... (cached) yes
checking for /emsdk/upstream/emscripten/emcc option to accept ISO C89... (cached) none needed
checking whether /emsdk/upstream/emscripten/emcc understands -c and -o together... (cached) yes
checking dependency style of /emsdk/upstream/emscripten/emcc... (cached) gcc3
checking the archiver (/emsdk/upstream/emscripten/emar) interface... ar
checking dependency style of /emsdk/upstream/emscripten/emcc... gcc3
checking the archiver (/emsdk/upstream/emscripten/emar) interface... (cached) ar
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking how to print strings... printf
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by /emsdk/upstream/emscripten/emcc... /emsdk/upstream/emscripten/emcc
checking if the linker (/emsdk/upstream/emscripten/emcc) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /emsdk/upstream/bin/llvm-nm
checking the name lister (/emsdk/upstream/bin/llvm-nm) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /emsdk/upstream/emscripten/emcc option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... /emsdk/upstream/emscripten/emranlib
checking command to parse /emsdk/upstream/bin/llvm-nm output from /emsdk/upstream/emscripten/emcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... no
checking if : is a manifest tool... no
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if /emsdk/upstream/emscripten/emcc supports -fno-rtti -fno-exceptions... yes
checking for /emsdk/upstream/emscripten/emcc option to produce PIC... -fPIC -DPIC
checking if /emsdk/upstream/emscripten/emcc PIC flag -fPIC -DPIC works... yes
checking if /emsdk/upstream/emscripten/emcc static flag -static works... yes
checking if /emsdk/upstream/emscripten/emcc supports -c -o file.o... yes
checking if /emsdk/upstream/emscripten/emcc supports -c -o file.o... (cached) yes
checking whether the /emsdk/upstream/emscripten/emcc linker (/emsdk/upstream/emscripten/emcc) supports shared libraries... emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 2.0.34 (0d24418f0eac4828f096ee070dae8472d427edaa)
clang version 14.0.0 (https://github.com/llvm/llvm-project 3d39612b3dd3f6b67ee63da305d30606abbe7287)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /emsdk/upstream/bin
yes
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... no
checking whether to build static libraries... yes
checking whether ln -s works... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking size of size_t... 0
checking whether compiler supports pointers to undefined structures... yes
checking whether __SUNPRO_C is declared... no
checking for pow in -lm... yes
checking for libpng... no
checking for libpng... no
checking for ANSI C header files... (cached) yes
checking stddef.h usability... yes
checking stddef.h presence... yes
checking for stddef.h... yes
checking for stdlib.h... (cached) yes
checking locale.h usability... yes
checking locale.h presence... yes
checking for locale.h... yes
checking for string.h... (cached) yes
checking for sys/types.h... (cached) yes
checking for an ANSI C-conforming const... yes
checking whether char is unsigned... no
checking for inline... inline
checking for size_t... yes
checking for unsigned char... yes
checking for unsigned short... yes
checking if right shift is signed... yes
checking for memset... yes
checking for memcpy... yes
checking libjpeg API version... 6.2
checking whether to include in-memory source/destination managers... yes
checking libjpeg shared library version... 62.2.0
checking whether the linker supports version scripts... yes (GNU style)
checking whether to use version script when building mozjpeg... yes
checking for inline... inline __attribute__((always_inline))
checking whether to include arithmetic encoding support... no
checking whether to include arithmetic decoding support... no
checking whether to use 12-bit samples... no
checking whether to build TurboJPEG C wrapper... no
checking whether to build TurboJPEG Java wrapper... no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating pkgscripts/mozjpeg.spec.tmpl
config.status: creating pkgscripts/makecygwinpkg.tmpl
config.status: creating pkgscripts/makedpkg.tmpl
config.status: creating pkgscripts/makemacpkg.tmpl
config.status: creating pkgscripts/uninstall.tmpl
config.status: creating pkgscripts/libjpeg.pc
config.status: creating pkgscripts/libturbojpeg.pc
config.status: creating libjpeg.map
config.status: creating Makefile
config.status: creating simd/Makefile
config.status: creating java/Makefile
config.status: creating md5/Makefile
config.status: creating config.h
config.status: creating jconfig.h
config.status: creating jconfigint.h
config.status: executing depfiles commands
config.status: executing libtool commands
# ^ If not provided with a dummy value, MozJPEG includes a build date in the
# binary as part of the version string, making binaries different each time.
make -C node_modules/mozjpeg libjpeg.la
make -C node_modules/mozjpeg rdswitch.o
make[1]: Entering directory '/src/node_modules/mozjpeg'
make[1]: Entering directory '/src/node_modules/mozjpeg'
  CC       jcapimin.lo
  CC       rdswitch.o
make[1]: Leaving directory '/src/node_modules/mozjpeg'
  CC       jcapistd.lo
  CC       jccoefct.lo
  CC       jccolor.lo
  CC       jcdctmgr.lo
  CC       jcext.lo
  CC       jchuff.lo
  CC       jcinit.lo
  CC       jcmainct.lo
  CC       jcmarker.lo
  CC       jcmaster.lo
  CC       jcomapi.lo
  CC       jcparam.lo
  CC       jcphuff.lo
  CC       jcprepct.lo
  CC       jcsample.lo
  CC       jctrans.lo
  CC       jdapimin.lo
  CC       jdapistd.lo
  CC       jdatadst.lo
  CC       jdatasrc.lo
  CC       jdcoefct.lo
  CC       jdcolor.lo
  CC       jddctmgr.lo
  CC       jdhuff.lo
  CC       jdinput.lo
  CC       jdmainct.lo
  CC       jdmarker.lo
  CC       jdmaster.lo
  CC       jdmerge.lo
  CC       jdphuff.lo
  CC       jdpostct.lo
  CC       jdsample.lo
  CC       jdtrans.lo
  CC       jerror.lo
  CC       jfdctflt.lo
  CC       jfdctfst.lo
  CC       jfdctint.lo
  CC       jidctflt.lo
  CC       jidctfst.lo
  CC       jidctint.lo
  CC       jidctred.lo
  CC       jquant1.lo
  CC       jquant2.lo
  CC       jutils.lo
  CC       jmemmgr.lo
  CC       jmemnobs.lo
  CC       jsimd_none.lo
  CCLD     libjpeg.la
make[1]: Leaving directory '/src/node_modules/mozjpeg'
/emsdk/upstream/emscripten/em++ \
        -I node_modules/mozjpeg \
        -O3 -flto -std=c++17 \
        -O3 -flto -s PTHREAD_POOL_SIZE=navigator.hardwareConcurrency -s FILESYSTEM=0 -s ALLOW_MEMORY_GROWTH=1 -s TEXTDECODER=0  \
        --pre-js pre.js \
        --bind \
        -s ENVIRONMENT=web,worker \
        -s EXPORT_ES6=1 \
        -s DYNAMIC_EXECUTION=0 \
        -s MODULARIZE=1 \
        -o enc/mozjpeg_enc.js \
        node_modules/mozjpeg/.libs/libjpeg.a node_modules/mozjpeg/rdswitch.o enc/mozjpeg_enc.cpp
/emsdk/upstream/emscripten/em++ \
        -I node_modules/mozjpeg \
        -O3 -flto -std=c++17 \
        -O3 -flto -s PTHREAD_POOL_SIZE=navigator.hardwareConcurrency -s FILESYSTEM=0 -s ALLOW_MEMORY_GROWTH=1 -s TEXTDECODER=0  \
        --pre-js pre.js \
        --bind \
        -s ENVIRONMENT=web,worker \
        -s EXPORT_ES6=1 \
        -s DYNAMIC_EXECUTION=0 \
        -s MODULARIZE=1 \
        -o dec/mozjpeg_dec.js \
        node_modules/mozjpeg/.libs/libjpeg.a node_modules/mozjpeg/rdswitch.o dec/mozjpeg_dec.cpp
/emsdk/upstream/emscripten/third_party/terser/terser.js:6892
        expr.print(output);
             ^

TypeError: Cannot read property 'print' of undefined
    at /emsdk/upstream/emscripten/third_party/terser/terser.js:6892:14
    at doit (/emsdk/upstream/emscripten/third_party/terser/terser.js:5999:13)
    at AST_Dot.<anonymous> (/emsdk/upstream/emscripten/third_party/terser/terser.js:6006:13)
    at /emsdk/upstream/emscripten/third_party/terser/terser.js:6934:19
    at doit (/emsdk/upstream/emscripten/third_party/terser/terser.js:5999:13)
    at AST_Binary.<anonymous> (/emsdk/upstream/emscripten/third_party/terser/terser.js:6006:13)
    at /emsdk/upstream/emscripten/third_party/terser/terser.js:6605:28
    at Object.with_parens (/emsdk/upstream/emscripten/third_party/terser/terser.js:5765:19)
    at /emsdk/upstream/emscripten/third_party/terser/terser.js:6604:16
    at doit (/emsdk/upstream/emscripten/third_party/terser/terser.js:5999:13)
em++: error: '/emsdk/node/14.15.5_64bit/bin/node /emsdk/upstream/emscripten/tools/acorn-optimizer.js /tmp/emscripten_temp_gopivn_d/mozjpeg_dec.js.pp.js AJSDCE minifyWhitespace --exportES6' failed (returned 1)
make: *** [Makefile:20: dec/mozjpeg_dec.js] Error 1
make: *** Waiting for unfinished jobs....
/emsdk/upstream/emscripten/third_party/terser/terser.js:6892
        expr.print(output);
             ^

TypeError: Cannot read property 'print' of undefined
    at /emsdk/upstream/emscripten/third_party/terser/terser.js:6892:14
    at doit (/emsdk/upstream/emscripten/third_party/terser/terser.js:5999:13)
    at AST_Dot.<anonymous> (/emsdk/upstream/emscripten/third_party/terser/terser.js:6006:13)
    at /emsdk/upstream/emscripten/third_party/terser/terser.js:6934:19
    at doit (/emsdk/upstream/emscripten/third_party/terser/terser.js:5999:13)
    at AST_Binary.<anonymous> (/emsdk/upstream/emscripten/third_party/terser/terser.js:6006:13)
    at /emsdk/upstream/emscripten/third_party/terser/terser.js:6605:28
    at Object.with_parens (/emsdk/upstream/emscripten/third_party/terser/terser.js:5765:19)
    at /emsdk/upstream/emscripten/third_party/terser/terser.js:6604:16
    at doit (/emsdk/upstream/emscripten/third_party/terser/terser.js:5999:13)
em++: error: '/emsdk/node/14.15.5_64bit/bin/node /emsdk/upstream/emscripten/tools/acorn-optimizer.js /tmp/emscripten_temp_y_at9g0h/mozjpeg_enc.js.pp.js AJSDCE minifyWhitespace --exportES6' failed (returned 1)
make: *** [Makefile:20: enc/mozjpeg_enc.js] Error 1
emmake: error: 'make -j2' failed (returned 2)

@jamsinclair
Copy link
Owner

jamsinclair commented Oct 28, 2024

Thanks I believe that error is actually caused by --pre-js option. You can comment out the follow line and it should compile:

--pre-js $(PRE_JS) \

We can probably use a later emscripten version to bypass that 🤔

Edit: Confirmed Emscripten 3.1.57 seems to work on my local codespace.

@jamsinclair
Copy link
Owner

Thanks for taking a look @jahed.

Looks like we both added similar fixes at the same time. I've also gone ahead and updated the scripts in the main branch to build it with Emscripten 3.1.57.

After playing around further, one observation is that jpegtran is a command line tool. Some extra care will be needed to make this work. One alternative would be to do the transformations ourselves by using the transupp.c api.

@jahed
Copy link
Contributor Author

jahed commented Oct 28, 2024

Looks like emsdk@v3 can't clean compile mozjpeg. Downgrading back to emsdk@v2 works (with the terser error).

config.log shows a permission error which is caused by caches created during the docker build RUN emcc steps.

Fixed by setting permissions to the cache files immediately after as suggested here: emscripten-core/emsdk#535 (comment)

RUN chmod -R 777 ${EMSDK}/upstream/emscripten/cache

Next, it was failing at ./conftest with no obvious errors. There's some [emcc](emcc: error: no input files) errors logged but I'm guessing they're fine as one of them passes.

Click for full config.log.
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by mozjpeg configure 3.3.1, which was
generated by GNU Autoconf 2.71.  Invocation command line was

  $ ./configure --disable-shared --without-turbojpeg --without-simd --without-arith-enc --without-arith-dec --with-build-date=jsquash

## --------- ##
## Platform. ##
## --------- ##

hostname = 8c8f3e52771f
uname -m = x86_64
uname -r = 6.5.0-1025-azure
uname -s = Linux
uname -v = #26~22.04.1-Ubuntu SMP Thu Jul 11 22:33:04 UTC 2024

/usr/bin/uname -p = x86_64
/bin/uname -X     = unknown

/bin/arch              = x86_64
/usr/bin/arch -k       = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo      = unknown
/bin/machine           = unknown
/usr/bin/oslevel       = unknown
/bin/universe          = unknown

PATH: /emsdk/upstream/emscripten/cache/sysroot/bin/
PATH: /emsdk/
PATH: /emsdk/upstream/emscripten/
PATH: /emsdk/node/20.18.0_64bit/bin/
PATH: /usr/local/sbin/
PATH: /usr/local/bin/
PATH: /usr/sbin/
PATH: /usr/bin/
PATH: /sbin/
PATH: /bin/


## ----------- ##
## Core tests. ##
## ----------- ##

configure:2884: looking for aux files: config.guess config.sub ltmain.sh ar-lib compile missing install-sh
configure:2897:  trying ./
configure:2926:   ./config.guess found
configure:2926:   ./config.sub found
configure:2926:   ./ltmain.sh found
configure:2926:   ./ar-lib found
configure:2926:   ./compile found
configure:2926:   ./missing found
configure:2908:   ./install-sh found
configure:3057: checking for a BSD-compatible install
configure:3130: result: /usr/bin/install -c
configure:3141: checking whether build environment is sane
configure:3196: result: yes
configure:3355: checking for a race-free mkdir -p
configure:3399: result: /usr/bin/mkdir -p
configure:3406: checking for gawk
configure:3441: result: no
configure:3406: checking for mawk
configure:3427: found /usr/bin/mawk
configure:3438: result: mawk
configure:3449: checking whether make sets $(MAKE)
configure:3472: result: yes
configure:3502: checking whether make supports nested variables
configure:3520: result: yes
configure:3670: checking whether make supports nested variables
configure:3688: result: yes
configure:3716: checking whether make supports the include directive
configure:3731: make -f confmf.GNU && cat confinc.out
make[1]: Entering directory '/src/node_modules/mozjpeg'
make[1]: Leaving directory '/src/node_modules/mozjpeg'
this is the am__doit target
configure:3734: $? = 0
configure:3753: result: yes (GNU style)
configure:3829: checking for gcc
configure:3861: result: /emsdk/upstream/emscripten/emcc
configure:4214: checking for C compiler version
configure:4223: /emsdk/upstream/emscripten/emcc --version >&5
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.70 (b53978ee3f540dc74761eba127aa7f1b8761a125)
Copyright (C) 2014 the Emscripten authors (see AUTHORS.txt)
This is free and open source software under the MIT license.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:4234: $? = 0
configure:4223: /emsdk/upstream/emscripten/emcc -v >&5
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.70 (b53978ee3f540dc74761eba127aa7f1b8761a125)
clang version 20.0.0git (https:/github.com/llvm/llvm-project f52b89561f2d929c0c6f37fd818229fbcad3b26c)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /emsdk/upstream/bin
configure:4234: $? = 0
configure:4223: /emsdk/upstream/emscripten/emcc -V >&5
emcc: error: no input files
configure:4234: $? = 1
configure:4223: /emsdk/upstream/emscripten/emcc -qversion >&5
emcc: error: no input files
configure:4234: $? = 1
configure:4223: /emsdk/upstream/emscripten/emcc -version >&5
emcc: error: no input files
configure:4234: $? = 1
configure:4254: checking whether the C compiler works
configure:4276: /emsdk/upstream/emscripten/emcc -O3 -flto  -O3 -flto -s PTHREAD_POOL_SIZE=navigator.hardwareConcurrency -s FILESYSTEM=0 -s ALLOW_MEMORY_GROWTH=1 -s TEXTDECODER=0  conftest.c  >&5
cache:INFO: generating system asset: symbol_lists/2ec2788ddffdb0c849fa5f91b6fa4e6b11ec216b.json... (this will be cached in "/emsdk/upstream/emscripten/cache/symbol_lists/2ec2788ddffdb0c849fa5f91b6fa4e6b11ec216b.json" for subsequent builds)
cache:INFO:  - ok
configure:4280: $? = 0
configure:4330: result: yes
configure:4333: checking for C compiler default output file name
configure:4335: result: a.out
configure:4341: checking for suffix of executables
configure:4348: /emsdk/upstream/emscripten/emcc -o conftest -O3 -flto  -O3 -flto -s PTHREAD_POOL_SIZE=navigator.hardwareConcurrency -s FILESYSTEM=0 -s ALLOW_MEMORY_GROWTH=1 -s TEXTDECODER=0  conftest.c  >&5
configure:4352: $? = 0
configure:4375: result: 
configure:4397: checking whether we are cross compiling
configure:4405: /emsdk/upstream/emscripten/emcc -o conftest -O3 -flto  -O3 -flto -s PTHREAD_POOL_SIZE=navigator.hardwareConcurrency -s FILESYSTEM=0 -s ALLOW_MEMORY_GROWTH=1 -s TEXTDECODER=0  conftest.c  >&5
configure:4409: $? = 0
configure:4416: ./conftest
configure:4420: $? = 1
configure:4427: error: in `/src/node_modules/mozjpeg':
configure:4429: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details

## ---------------- ##
## Cache variables. ##
## ---------------- ##

ac_cv_env_CCASFLAGS_set=
ac_cv_env_CCASFLAGS_value=
ac_cv_env_CCAS_set=
ac_cv_env_CCAS_value=
ac_cv_env_CC_set=set
ac_cv_env_CC_value=/emsdk/upstream/emscripten/emcc
ac_cv_env_CFLAGS_set=set
ac_cv_env_CFLAGS_value='-O3 -flto'
ac_cv_env_CPPFLAGS_set=
ac_cv_env_CPPFLAGS_value=
ac_cv_env_CPP_set=
ac_cv_env_CPP_value=
ac_cv_env_JAR_set=
ac_cv_env_JAR_value=
ac_cv_env_JAVACFLAGS_set=
ac_cv_env_JAVACFLAGS_value=
ac_cv_env_JAVAC_set=
ac_cv_env_JAVAC_value=
ac_cv_env_JAVA_set=
ac_cv_env_JAVA_value=
ac_cv_env_JNI_CFLAGS_set=
ac_cv_env_JNI_CFLAGS_value=
ac_cv_env_JPEG_LIB_VERSION_set=
ac_cv_env_JPEG_LIB_VERSION_value=
ac_cv_env_LDFLAGS_set=set
ac_cv_env_LDFLAGS_value='-O3 -flto -s PTHREAD_POOL_SIZE=navigator.hardwareConcurrency -s FILESYSTEM=0 -s ALLOW_MEMORY_GROWTH=1 -s TEXTDECODER=0 '
ac_cv_env_LIBS_set=
ac_cv_env_LIBS_value=
ac_cv_env_LT_SYS_LIBRARY_PATH_set=
ac_cv_env_LT_SYS_LIBRARY_PATH_value=
ac_cv_env_NASM_set=
ac_cv_env_NASM_value=
ac_cv_env_PKGNAME_set=
ac_cv_env_PKGNAME_value=
ac_cv_env_PKG_CONFIG_LIBDIR_set=set
ac_cv_env_PKG_CONFIG_LIBDIR_value=/emsdk/upstream/emscripten/cache/sysroot/local/lib/pkgconfig:/emsdk/upstream/emscripten/cache/sysroot/lib/pkgconfig
ac_cv_env_PKG_CONFIG_PATH_set=set
ac_cv_env_PKG_CONFIG_PATH_value=
ac_cv_env_PKG_CONFIG_set=
ac_cv_env_PKG_CONFIG_value=
ac_cv_env_SO_MAJOR_VERSION_set=
ac_cv_env_SO_MAJOR_VERSION_value=
ac_cv_env_SO_MINOR_VERSION_set=
ac_cv_env_SO_MINOR_VERSION_value=
ac_cv_env_build_alias_set=
ac_cv_env_build_alias_value=
ac_cv_env_host_alias_set=
ac_cv_env_host_alias_value=
ac_cv_env_libpng_CFLAGS_set=
ac_cv_env_libpng_CFLAGS_value=
ac_cv_env_libpng_LIBS_set=
ac_cv_env_libpng_LIBS_value=
ac_cv_env_target_alias_set=
ac_cv_env_target_alias_value=
ac_cv_path_install='/usr/bin/install -c'
ac_cv_path_mkdir=/usr/bin/mkdir
ac_cv_prog_AWK=mawk
ac_cv_prog_ac_ct_CC=/emsdk/upstream/emscripten/emcc
ac_cv_prog_make_make_set=yes
am_cv_make_support_nested_variables=yes

## ----------------- ##
## Output variables. ##
## ----------------- ##

ACLOCAL='${SHELL} '\''/src/node_modules/mozjpeg/missing'\'' aclocal-1.16'
AMDEPBACKSLASH='\'
AMDEP_FALSE='#'
AMDEP_TRUE=''
AMTAR='$${TAR-tar}'
AM_BACKSLASH='\'
AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
AM_DEFAULT_VERBOSITY='0'
AM_V='$(V)'
AR='/emsdk/upstream/emscripten/emar'
AUTOCONF='${SHELL} '\''/src/node_modules/mozjpeg/missing'\'' autoconf'
AUTOHEADER='${SHELL} '\''/src/node_modules/mozjpeg/missing'\'' autoheader'
AUTOMAKE='${SHELL} '\''/src/node_modules/mozjpeg/missing'\'' automake-1.16'
AWK='mawk'
BUILD='20241028'
CC='/emsdk/upstream/emscripten/emcc'
CCAS=''
CCASDEPMODE=''
CCASFLAGS=''
CCDEPMODE=''
CFLAGS='-O3 -flto'
CPP=''
CPPFLAGS=''
CROSS_COMPILING_FALSE=''
CROSS_COMPILING_TRUE=''
CSCOPE='cscope'
CTAGS='ctags'
CYGPATH_W='echo'
DEBARCH=''
DEFS=''
DEPDIR='.deps'
DLLTOOL=''
DSYMUTIL=''
DUMPBIN=''
ECHO_C=''
ECHO_N='-n'
ECHO_T=''
EGREP=''
ETAGS='etags'
EXEEXT=''
FGREP=''
GREP=''
HAVE_LIBPNG_FALSE=''
HAVE_LIBPNG_TRUE=''
INSTALL_DATA='${INSTALL} -m 644'
INSTALL_PROGRAM='${INSTALL}'
INSTALL_SCRIPT='${INSTALL}'
INSTALL_STRIP_PROGRAM='$(install_sh) -c -s'
JAR=''
JAVA=''
JAVAC=''
JAVACFLAGS=''
JAVA_RPM_CONTENTS_1=''
JAVA_RPM_CONTENTS_2=''
JNI_CFLAGS=''
JPEG_LIB_VERSION=''
JPEG_LIB_VERSION_DECIMAL=''
LD='/emsdk/upstream/emscripten/emcc'
LDFLAGS='-O3 -flto -s PTHREAD_POOL_SIZE=navigator.hardwareConcurrency -s FILESYSTEM=0 -s ALLOW_MEMORY_GROWTH=1 -s TEXTDECODER=0 '
LIBOBJS=''
LIBS=''
LIBTOOL=''
LIBTOOL_CURRENT=''
LIPO=''
LN_S=''
LTLIBOBJS=''
LT_SYS_LIBRARY_PATH=''
MAKEINFO='${SHELL} '\''/src/node_modules/mozjpeg/missing'\'' makeinfo'
MANIFEST_TOOL=''
MEM_SRCDST_FUNCTIONS=''
MKDIR_P='/usr/bin/mkdir -p'
NAFLAGS=''
NASM=''
NM='/emsdk/upstream/bin/llvm-nm'
NMEDIT=''
OBJDUMP=''
OBJEXT=''
OTOOL64=''
OTOOL=''
PACKAGE='mozjpeg'
PACKAGE_BUGREPORT=''
PACKAGE_NAME='mozjpeg'
PACKAGE_STRING='mozjpeg 3.3.1'
PACKAGE_TARNAME='mozjpeg'
PACKAGE_URL=''
PACKAGE_VERSION='3.3.1'
PATH_SEPARATOR=':'
PKGNAME=''
PKG_CONFIG=''
PKG_CONFIG_LIBDIR='/emsdk/upstream/emscripten/cache/sysroot/local/lib/pkgconfig:/emsdk/upstream/emscripten/cache/sysroot/lib/pkgconfig'
PKG_CONFIG_PATH=''
RANLIB='/emsdk/upstream/emscripten/emranlib'
RPMARCH=''
RPM_CONFIG_ARGS=''
SED=''
SET_MAKE=''
SHELL='/bin/bash'
SIMD_ARM_64_FALSE=''
SIMD_ARM_64_TRUE=''
SIMD_ARM_FALSE=''
SIMD_ARM_TRUE=''
SIMD_I386_FALSE=''
SIMD_I386_TRUE=''
SIMD_MIPS_FALSE=''
SIMD_MIPS_TRUE=''
SIMD_POWERPC_FALSE=''
SIMD_POWERPC_TRUE=''
SIMD_X86_64_FALSE=''
SIMD_X86_64_TRUE=''
SO_AGE=''
SO_MAJOR_VERSION=''
SO_MINOR_VERSION=''
STRIP=''
VERSION='3.3.1'
VERSION_SCRIPT_FALSE=''
VERSION_SCRIPT_FLAG=''
VERSION_SCRIPT_TRUE=''
WITH_12BIT_FALSE=''
WITH_12BIT_TRUE=''
WITH_ARITH_DEC_FALSE=''
WITH_ARITH_DEC_TRUE=''
WITH_ARITH_ENC_FALSE=''
WITH_ARITH_ENC_TRUE=''
WITH_ARITH_FALSE=''
WITH_ARITH_TRUE=''
WITH_JAVA=''
WITH_JAVA_FALSE=''
WITH_JAVA_TRUE=''
WITH_SIMD_FALSE=''
WITH_SIMD_TRUE=''
WITH_SSE_FLOAT_DCT_FALSE=''
WITH_SSE_FLOAT_DCT_TRUE=''
WITH_TURBOJPEG_FALSE=''
WITH_TURBOJPEG_TRUE=''
X86_64_FALSE=''
X86_64_TRUE=''
ac_ct_AR=''
ac_ct_CC='/emsdk/upstream/emscripten/emcc'
ac_ct_DUMPBIN=''
am__EXEEXT_FALSE=''
am__EXEEXT_TRUE=''
am__fastdepCCAS_FALSE=''
am__fastdepCCAS_TRUE=''
am__fastdepCC_FALSE=''
am__fastdepCC_TRUE=''
am__include='include'
am__isrc=''
am__leading_dot='.'
am__nodep='_no'
am__quote=''
am__tar='$${TAR-tar} chof - "$$tardir"'
am__untar='$${TAR-tar} xf -'
bindir='${exec_prefix}/bin'
build=''
build_alias=''
build_cpu=''
build_os=''
build_vendor=''
datadir='${datarootdir}'
datarootdir='${prefix}/share'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
dvidir='${docdir}'
exec_prefix='NONE'
host=''
host_alias=''
host_cpu=''
host_os=''
host_vendor=''
htmldir='${docdir}'
includedir='${prefix}/include'
infodir='${datarootdir}/info'
install_sh='${SHELL} /src/node_modules/mozjpeg/install-sh'
libdir='${exec_prefix}/lib'
libexecdir='${exec_prefix}/libexec'
libpng_CFLAGS=''
libpng_LIBS=''
localedir='${datarootdir}/locale'
localstatedir='${prefix}/var'
mandir='${datarootdir}/man'
mkdir_p='$(MKDIR_P)'
oldincludedir='/usr/include'
pdfdir='${docdir}'
prefix='NONE'
program_transform_name='s,x,x,'
psdir='${docdir}'
runstatedir='${localstatedir}/run'
sbindir='${exec_prefix}/sbin'
sharedstatedir='${prefix}/com'
sysconfdir='${prefix}/etc'
target_alias=''

## ----------- ##
## confdefs.h. ##
## ----------- ##

/* confdefs.h */
#define PACKAGE_NAME "mozjpeg"
#define PACKAGE_TARNAME "mozjpeg"
#define PACKAGE_VERSION "3.3.1"
#define PACKAGE_STRING "mozjpeg 3.3.1"
#define PACKAGE_BUGREPORT ""
#define PACKAGE_URL ""
#define PACKAGE "mozjpeg"
#define VERSION "3.3.1"

configure: exit 77

@jahed
Copy link
Contributor Author

jahed commented Oct 28, 2024

The old version of terser in emsdk@2 is failing at this block (unsupported import.meta syntax):

if (import.meta.url === undefined) {
import.meta.url = 'https://localhost';
}

If emsdk@v3 is too much effort to upgrade to right now, that block can be removed. Node 18 is the lowest maintained NodeJS version and it supports import.meta.url.

Created a PR for that if it's a viable option:

@jamsinclair
Copy link
Owner

I also commented in the merge request, but the import.meta.url hotfix is still needed to support cloudflare workers.

I think I have solved the compilation issues with emsdk@3 if you pull the latest main branch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature-request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants