plzombie / depress

Program to create djvu from multiple files (using djvulibre)
https://depress.tech/
BSD 2-Clause "Simplified" License
4 stars 1 forks source link

depress.exe: port to linux #5

Closed plzombie closed 1 year ago

plzombie commented 1 year ago

Done:

To be done:

plzombie commented 1 year ago

Done:

plzombie commented 1 year ago

@zvezdochiot застрял с реализацией. Под линуксом conditional variables (аналог events из винды) требуют создания мьютекса. А я специально писал на событиях, чтобы мьютексы не использовать по максимуму. Если есть идея чем заменить...

zvezdochiot commented 1 year ago

@plzombie say:

Если есть идея чем заменить...

Ни капли. Я эти птхреады вообще не врубаю. Я ж самоучка на 100%. Всему обучмлся на гите.

plzombie commented 1 year ago

Done:

plzombie commented 1 year ago

Done:

plzombie commented 1 year ago

Линукс канешн прекрасная операционка, в alt linux нет большинства переменных отсюда https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html

zvezdochiot commented 1 year ago

Hi @plzombie .

depress-w/BUILD_UNIX_MAKEFILE$ make
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/depress.c
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/depress_converter.c
../src/depress_converter.c: In function ‘depressConvertLayeredPage’:
../src/depress_converter.c:201:7: warning: variable ‘level’ set but not used [-Wunused-but-set-variable]
  201 |   int level;
      |       ^~~~~
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/depress_document.c
../src/depress_document.c: In function ‘depressDocumentGetTitleFromFilename’:
../src/depress_document.c:89:14: warning: ‘codepoint’ may be used uninitialized in this function [-Wmaybe-uninitialized]
   89 |    codepoint |= temp[i] - 0xdc00;
      |    ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
../src/depress_document.c: In function ‘depressDocumentCreateTasksFromTextFile’:
../src/depress_document.c:447:4: warning: ‘f’ may be used uninitialized in this function [-Wmaybe-uninitialized]
  447 |  if(!f) {
      |    ^
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/depress_image.c
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/depress_paths.c
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/depress_tasks.c
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/depress_threads.c
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/ppm_save.c
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/interlocked_ptr.c
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/unixsupport/waccess.c
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/unixsupport/wfopen.c
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/unixsupport/wmain_stdc.c
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/unixsupport/wmkdir.c
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/unixsupport/wpopen.c
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/unixsupport/wremove.c                                                                                                                                                                                                           
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/unixsupport/wrmdir.c                                                                                                                                                                                                            
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/unixsupport/wtoi.c                                                                                                                                                                                                              
gcc -O3 -c -Wall -DFASTIMAGE_USE_LIBCURL -pthread ../src/extclib/wcstombsl.c                                                                                                                                                                                                             

Полёт нормальный. :+1:

PS: Только на кой нужен здесь этот дефайн FASTIMAGE_USE_LIBCURL? (не вникал, просто интересно)

plzombie commented 1 year ago

Из того что осталось реализовать:

Последний пункт исправить и должно уже работать

PS: Только на кой нужен здесь этот дефайн FASTIMAGE_USE_LIBCURL? (не вникал, просто интересно)

Мэйкфайл из того проекта скопировал, забыл удалить

zvezdochiot commented 1 year ago

@plzombie say:

Последний пункт исправить и должно уже работать

Дока! Доку ты ни разу не обновил. Как я буду пользовать прогу без мана? ;)))

@plzombie say:

"с44 input.ppm output.djvu"

А ежели так: "$(с44 input.ppm output.djvu)"? Или так sh -c "с44 input.ppm output.djvu"?

plzombie commented 1 year ago

Ок, с последним вариантом работает, даже успешно конвертирует. С остальным (включая доки) завтра разберусь

plzombie commented 1 year ago

What must be done:

_wpopen (wrapper around popen) is not working. See this line

I have tried following command lines:

""djvused" "/path/to/file.djvu"" ""/usr/bin/djvused" "/path/to/file.djvu"" "djvused" "/path/to/file.djvu" "/usr/bin/djvused" "/path/to/file.djvu"

First 2 commands (with quotations around whole command) worked perfectly on Windows.

What should this line do - open pipe running djvused with djvu file as an argument.

zvezdochiot commented 1 year ago

@plzombie say:

_wpopen (wrapper around popen) is not working.

Я сталкивался с тем, что djvused не сохранял результат по -s. Решал путём save-page filename. Где filename обязательно новое.

plzombie commented 1 year ago

Вот проблема в том, что в винде всё работает, в терминале всё работает, а в линуксе через popen не открывает

zvezdochiot commented 1 year ago

@plzombie say:

через popen не открывает

А как же остальные комманды из DjVuLibre (c44, cjb2, djvumake)? Ну да ладно. Может чисто для линя пользовать system (stdlib.h)?:

int system (const char *command);
plzombie commented 1 year ago

Это единственная команда, которая работает через пайпы. Собственно, я и использую тут пайпы, чтобы в файл команды не сохранять. В stdin пишу

plzombie commented 1 year ago

Вот сейчас запустил отдельно тест _wpopen, функция-обёртка отработала правильно. Надо разбираться, как запустить djvused с параметром изображение

plzombie commented 1 year ago

@zvezdochiot Нашёл в чём ошибка. Во первых, в линуксе не надо заключать строку в общие кавычки. Во вторых, в линуксе fwprintf/fwscanf не работает с пайпами. И не выдаёт никаких ошибок. Если ты ещё немного протестируешь, и таск можно закрывать, я думаю

zvezdochiot commented 1 year ago

@plzombie say:

Если ты ещё немного протестируешь, и таск можно закрывать, я думаю

Понял. Как руки дойдут, так сразу. Отпишусь.

PS: Сразу скажу:

-dpi - DPI parameter (default to 300)

то ли дефолт ни разу не 300, то ли он не пашет.

Hi @plzombie .

Отработало "всё", кроме -palettized:

./depress -dpi 300 -palettized -noteshrink test.txt test.noteshrink.djvu 
Opening list: "/home/zvezdochiot/WORK/pub/soft/depress/BUILD_UNIX_MAKEFILE/test/test.txt"
/bin/sh: 1: : Permission denied
/bin/sh: 1: : Permission denied
/bin/sh: 1: : Permission denied
/bin/sh: 1: : Permission denied
/bin/sh: 1: : Permission denied
/bin/sh: 1: : Permission denied
Merging file "/home/zvezdochiot/WORK/pub/soft/depress/BUILD_UNIX_MAKEFILE/test/p-001.jpg"
*** /bin/sh: 1: [1-11711] Failed to open 'test.noteshrink.djvu': Нет такого файла или каталога.
*** (ByteStream.cpp:747)
/bin/sh: 1: : Permission denied
: Permission denied
*** 'DJVU::GUTF8String DJVU::ByteStream::Stdio::init(const DJVU::GURL&, const char*)'
...

:warning: Ты куда файлы сохранять пытаешься? Permission denied, в лине с этим строго, куда попало сохранять незя!

PS: Прямое указание -temp так же ничего не дало.

plzombie commented 1 year ago

@zvezdochiot Пофиксил. dpi было 100 по умолчанию, поправил доки

zvezdochiot commented 1 year ago

@plzombie , провёл демку: https://github.com/ImageProcessing-ElectronicPublications/depress-demo/commit/ac6e4b23d7c42b5109a11513e37e2c4e93f28801

PS: Эй, ну ты хоть git gc --prune=now --aggressive перед пушем делай. А иначе репа мало-помалу засираться начинает.

plzombie commented 1 year ago

@zvezdochiot Ок, спасибо. Тогда закрываю issue