From bb9eee26929e9235c8b9b2898580d3ed147ba124 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 24 Jun 2023 23:58:33 +0200 Subject: [PATCH] Made es-pdf-convert work on macOS --- es-app/CMakeLists.txt | 13 ++++ es-pdf-converter/CMakeLists.txt | 3 + es-pdf-converter/src/main.cpp | 4 ++ tools/macOS_dependencies_build.sh | 109 ++++++++++++++++++++++++++++-- tools/macOS_dependencies_setup.sh | 94 ++++++++++++++++++++++++-- 5 files changed, 214 insertions(+), 9 deletions(-) diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index eb8f786ed..2d2bcd0ca 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -263,6 +263,7 @@ elseif(APPLE) # to compensate for this. It's a bad solution to the problem and there must surely be a # better way to fix this. install(TARGETS EmulationStation RUNTIME DESTINATION ../MacOS) + install(TARGETS es-pdf-convert RUNTIME DESTINATION ../MacOS) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE.icns DESTINATION ../Resources) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE_Info.plist DESTINATION .. RENAME Info.plist) @@ -288,10 +289,22 @@ elseif(APPLE) PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS) install(FILES ${CMAKE_SOURCE_DIR}/libvorbisenc.2.0.12.dylib PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS) + install(FILES ${CMAKE_SOURCE_DIR}/libfontconfig.1.dylib + PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS) install(FILES ${CMAKE_SOURCE_DIR}/libfreetype.6.dylib PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS) install(FILES ${CMAKE_SOURCE_DIR}/libgit2.1.6.dylib PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS) + install(FILES ${CMAKE_SOURCE_DIR}/libjpeg.62.dylib + PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS) + install(FILES ${CMAKE_SOURCE_DIR}/libopenjp2.7.dylib + PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS) + install(FILES ${CMAKE_SOURCE_DIR}/libpoppler-cpp.0.dylib + PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS) + install(FILES ${CMAKE_SOURCE_DIR}/libpoppler.129.dylib + PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS) + install(FILES ${CMAKE_SOURCE_DIR}/libtiff.6.dylib + PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS) install(FILES ${CMAKE_SOURCE_DIR}/libSDL2-2.0.0.dylib PERMISSIONS ${APPLE_DYLIB_PERMISSIONS} DESTINATION ../MacOS) diff --git a/es-pdf-converter/CMakeLists.txt b/es-pdf-converter/CMakeLists.txt index 87556008d..965d97f64 100644 --- a/es-pdf-converter/CMakeLists.txt +++ b/es-pdf-converter/CMakeLists.txt @@ -16,6 +16,9 @@ if(WIN32) set(POPPLER_CPP_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/libpoppler-cpp-0.dll) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -municode") endif() +elseif(APPLE) + set(POPPLER_CPP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/cpp ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/build/cpp) + set(POPPLER_CPP_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/../libpoppler-cpp.0.dylib) else() find_package(Poppler REQUIRED COMPONENTS cpp) endif() diff --git a/es-pdf-converter/src/main.cpp b/es-pdf-converter/src/main.cpp index f171933b6..89d09a8f0 100644 --- a/es-pdf-converter/src/main.cpp +++ b/es-pdf-converter/src/main.cpp @@ -87,7 +87,11 @@ int main(int argc, char* argv[]) validArguments = false; if (!validArguments) { +#if defined(APPLE) + std::cout << "This binary is only intended to be executed by EmulationStation (ES-DE)" +#else std::cout << "This binary is only intended to be executed by emulationstation (ES-DE)" +#endif << std::endl; exit(-1); } diff --git a/tools/macOS_dependencies_build.sh b/tools/macOS_dependencies_build.sh index 2e6ad1172..07119deb7 100755 --- a/tools/macOS_dependencies_build.sh +++ b/tools/macOS_dependencies_build.sh @@ -15,7 +15,7 @@ export MACOSX_DEPLOYMENT_TARGET=10.14 # How many CPU threads to use for the compilation. -JOBS=4 +JOBS=8 if [ ! -f .clang-format ]; then echo "You need to run this script from the root of the repository." @@ -52,6 +52,7 @@ make -j${JOBS} make install cd .. +echo echo "\nBuilding FreeType" if [ ! -d freetype/build ]; then @@ -64,9 +65,101 @@ rm -f CMakeCache.txt cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_DISABLE_FIND_PACKAGE_HarfBuzz=on -DBUILD_SHARED_LIBS=on -DCMAKE_MACOSX_RPATH=on -DCMAKE_INSTALL_PREFIX=$(pwd)/../../local_install -S .. -B . make clean make -j${JOBS} -cp libfreetype.6.18.3.dylib ../../../libfreetype.6.dylib +cp libfreetype.6.19.0.dylib ../../../libfreetype.6.dylib cd ../.. +echo +echo "Building Fontconfig" + +if [ ! -d fontconfig ]; then + echo "fontconfig directory is missing, aborting." + exit +fi + +cd fontconfig +rm -rf builddir +meson setup --buildtype=release --prefix $(pwd)/../local_install builddir +cd builddir +meson compile +meson install +cp src/libfontconfig.1.dylib ../../../ +cd ../.. + +echo +echo "Building libjpeg-turbo" + +if [ ! -d libjpeg-turbo ]; then + echo "libjpeg-turbo directory is missing, aborting." + exit +fi + +cd libjpeg-turbo/build +rm -f CMakeCache.txt +cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$(pwd)/../../local_install -B . -S .. +make clean +make -j${JOBS} +make install +cp libjpeg.62.4.0.dylib ../../../libjpeg.62.dylib +cd ../.. + +echo +echo "Building LibTIFF" + +if [ ! -d libtiff ]; then + echo "libtiff directory is missing, aborting." + exit +fi + +cd libtiff/build +rm -f CMakeCache.txt +cmake -DCMAKE_BUILD_TYPE=Release -Dtiff-tools=off -Dtiff-tests=off -Dtiff-contrib=off -Dtiff-docs=off -DCMAKE_INSTALL_PREFIX=$(pwd)/../../local_install -B . -S .. +make clean +make -j${JOBS} +make install +cp libtiff/libtiff.6.0.1.dylib ../../../libtiff.6.dylib +cd ../.. + +echo +echo "Building OpenJPEG" + +if [ ! -d openjpeg ]; then + echo "openjpeg directory is missing, aborting." + exit +fi + +cd openjpeg/build +rm -f CMakeCache.txt +PKG_CONFIG_PATH=$(pwd)/../local_install/lib/pkgconfig cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$(pwd)/../../local_install -S .. -B . +make clean +make -j${JOBS} +make install +cp bin/libopenjp2.2.5.0.dylib ../../../libopenjp2.7.dylib +cd ../.. + +echo +echo "Building Poppler" + +if [ ! -d poppler ]; then + echo "poppler directory is missing, aborting." + exit +fi + +cd poppler/build +rm -f CMakeCache.txt +PKG_CONFIG_PATH=$(pwd)/../local_install/lib/pkgconfig cmake -S .. -B . -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=$(pwd)/../../local_install -DENABLE_UTILS=off -DBUILD_CPP_TESTS=off -DENABLE_LIBCURL=off \ +-DRUN_GPERF_IF_PRESENT=off -DENABLE_QT5=off -DENABLE_QT6=off -DENABLE_BOOST=off -DENABLE_GLIB=off -DENABLE_NSS3=off +make clean +make -j${JOBS} + +# This will fail if there are spaces in the build path. +install_name_tool -change $(otool -L libpoppler.129.dylib | grep libfreetype | cut -f1 -d' ' | sed 's/[[:blank:]]//g') @rpath/libfreetype.6.dylib libpoppler.129.dylib +install_name_tool -change $(otool -L libpoppler.129.dylib | grep libfontconfig | cut -f1 -d' ' | sed 's/[[:blank:]]//g') @rpath/libfontconfig.1.dylib libpoppler.129.dylib + +cp libpoppler.129.0.0.dylib ../../../libpoppler.129.dylib +cp cpp/libpoppler-cpp.0.11.0.dylib ../../../libpoppler-cpp.0.dylib +cd ../.. + +echo echo "\nBuilding FreeImage" if [ ! -d freeimage/FreeImage ]; then @@ -80,6 +173,7 @@ make -j${JOBS} cp libfreeimage.a ../../.. cd ../.. +echo echo "\nBuilding libgit2" if [ ! -d libgit2/build ]; then @@ -92,9 +186,10 @@ rm -f CMakeCache.txt cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF .. make clean make -j${JOBS} -cp libgit2.1.6.3.dylib ../../../libgit2.1.6.dylib +cp libgit2.1.6.4.dylib ../../../libgit2.1.6.dylib cd ../.. +echo echo "\nBuilding pugixml" if [ ! -d pugixml ]; then @@ -110,6 +205,7 @@ make -j${JOBS} cp libpugixml.a ../.. cd .. +echo echo "\nBuilding SDL" if [ ! -d SDL/build ]; then @@ -125,6 +221,7 @@ make -j${JOBS} cp libSDL2-2.0.0.dylib ../../.. cd ../.. +echo echo "\nBuilding libvpx" if [ ! -d libvpx ]; then @@ -133,12 +230,13 @@ if [ ! -d libvpx ]; then fi cd libvpx -./configure --disable-examples --disable-docs --enable-pic --enable-vp9-highbitdepth --prefix=$(pwd)/../local_install +./configure --disable-examples --disable-docs --disable-tools --disable-unit-tests --enable-pic --enable-vp9-highbitdepth --prefix=$(pwd)/../local_install make clean make -j${JOBS} make install cd .. +echo echo "\nBuilding Ogg" if [ ! -d ogg ]; then @@ -154,6 +252,7 @@ make -j${JOBS} make install cd .. +echo echo "\nBuilding Vorbis" if [ ! -d vorbis ]; then @@ -171,6 +270,7 @@ cp lib/libvorbisenc.2.0.12.dylib ../.. cp lib/libvorbis.0.4.9.dylib ../.. cd .. +echo echo "\nBuilding Opus" if [ ! -d opus ]; then @@ -186,6 +286,7 @@ make -j${JOBS} make install cd .. +echo echo "\nBuilding FFmpeg" if [ ! -d FFmpeg ]; then diff --git a/tools/macOS_dependencies_setup.sh b/tools/macOS_dependencies_setup.sh index 3b2e35686..ac4471cec 100755 --- a/tools/macOS_dependencies_setup.sh +++ b/tools/macOS_dependencies_setup.sh @@ -32,9 +32,10 @@ fi mv code libpng cd libpng -git checkout v1.6.38 +git checkout v1.6.40 cd .. +echo echo "\nSetting up FreeType" rm -rf freetype git clone https://github.com/freetype/freetype.git @@ -45,10 +46,85 @@ if [ ! -d freetype ]; then fi cd freetype -git checkout VER-2-12-1 +git checkout VER-2-13-0 mkdir build cd .. +echo +echo "Setting up Fontconfig" +rm -rf fontconfig +git clone https://gitlab.freedesktop.org/fontconfig/fontconfig.git + +if [ ! -d fontconfig ]; then + echo "fontconfig directory is missing, aborting." + exit +fi + +cd fontconfig +git checkout 2.14.2 +cd .. + +echo +echo "Setting up libjpeg-turbo" +rm -rf libjpeg-turbo +git clone https://github.com/libjpeg-turbo/libjpeg-turbo.git + +if [ ! -d libjpeg-turbo ]; then + echo "libjpeg-turbo directory is missing, aborting." + exit +fi + +cd libjpeg-turbo +git checkout 2.1.91 +mkdir build +cd .. + +echo +echo "Setting up LibTIFF" +rm -rf libtiff +git clone https://gitlab.com/libtiff/libtiff.git + +if [ ! -d libtiff ]; then + echo "libtiff directory is missing, aborting." + exit +fi + +cd libtiff +git checkout v4.5.1 +mkdir build +cd .. + +echo +echo "Setting up OpenJPEG" +rm -rf openjpeg +git clone https://github.com/uclouvain/openjpeg.git + +if [ ! -d openjpeg ]; then + echo "openjpeg directory is missing, aborting." + exit +fi + +cd openjpeg +git checkout v2.5.0 +mkdir build +cd .. + +echo +echo "Setting up Poppler" +rm -rf poppler +git clone https://gitlab.freedesktop.org/poppler/poppler.git + +if [ ! -d poppler ]; then + echo "poppler directory is missing, aborting." + exit +fi + +cd poppler +git checkout poppler-23.06.0 +mkdir build +cd .. + +echo echo "\nSetting up FreeImage" rm -rf freeimage mkdir freeimage @@ -164,6 +240,7 @@ EOF fi cd ../.. +echo echo "\nSetting up libgit2" rm -rf libgit2 git clone https://github.com/libgit2/libgit2.git @@ -174,10 +251,11 @@ if [ ! -d libgit2 ]; then fi cd libgit2 -git checkout v1.6.3 +git checkout v1.6.4 mkdir build cd .. +echo echo "\nSetting up pugixml" rm -rf pugixml git clone https://github.com/zeux/pugixml.git @@ -188,9 +266,10 @@ if [ ! -d pugixml ]; then fi cd pugixml -git checkout v1.12.1 +git checkout v1.13 cd .. +echo echo "\nSetting up SDL" rm -rf SDL git clone https://github.com/libsdl-org/SDL.git @@ -206,6 +285,7 @@ ln -s include SDL2 mkdir build cd .. +echo echo "\nSetting up libvpx" rm -rf libvpx git clone https://github.com/webmproject/libvpx.git @@ -216,9 +296,10 @@ if [ ! -d libvpx ]; then fi cd libvpx -git checkout v1.12.0 +git checkout v1.13.0 cd .. +echo echo "\nSetting up Ogg" rm -rf ogg git clone https://github.com/xiph/ogg.git @@ -232,6 +313,7 @@ cd ogg git checkout v1.3.5 cd .. +echo echo "\nSetting up Vorbis" rm -rf vorbis git clone https://gitlab.xiph.org/xiph/vorbis.git @@ -245,6 +327,7 @@ cd vorbis git checkout v1.3.7 cd .. +echo echo "\nSetting up Opus" rm -rf opus git clone https://gitlab.xiph.org/xiph/opus.git @@ -258,6 +341,7 @@ cd opus git checkout v1.3.1 cd .. +echo echo "\nSetting up FFmpeg" rm -rf FFmpeg git clone https://github.com/FFmpeg/FFmpeg.git