diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7e68b9015..bea120775 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,12 +10,12 @@ on: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: - build: + build-environment: + name: Build Environment runs-on: macos-latest - steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Check System run: | @@ -25,15 +25,90 @@ jobs: - name: Setup Homebrew & Various Tools run: | #/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - brew install git ccache autoconf libtool automake pkg-config sassc optipng python bison flex + brew install git ccache autoconf libtool automake pkg-config sassc optipng python bison flex cmake itstool gnu-sed - name: Setup JHbuild run: | ln -sf $PWD/osx/jhbuildrc-custom $HOME/.jhbuildrc-custom /bin/bash -c "$(curl -fsSL https://gitlab.gnome.org/GNOME/gtk-osx/raw/master/gtk-osx-setup.sh)" + # Cache downloaded sources. This shouldn't really depend on the jhbuildrc-custom + # TODO: Figure out a better cache key for sources. + - uses: actions/cache@v3 + with: + path: | + /Users/runner/Sources + key: ${{ hashFiles('osx/jhbuildrc-custom') }} + + - uses: actions/cache@v3 + with: + path: | + /Users/runner/gtk + key: ${{ runner.os }}-${{ hashFiles('osx/jhbuildrc-custom') }}-${{ hashFiles('osx/build_env.sh') }} + - name: Build Environment run: | - cd osx && /bin/bash ./build_env.sh + echo Building in $HOME/gtk/inst + cd osx && /bin/bash ./build_env.sh + + - name: Compress Environment + working-directory: / + shell: 'bash' + run: | + tar -czf /Users/runner/work/environment.tar.gz $HOME/gtk $HOME/.new_local + + - name: Upload Environment + uses: actions/upload-artifact@v3.1.3 + with: + name: Environment + path: | + /Users/runner/work/environment.tar.gz + + build-app: + name: Build Application + runs-on: macos-latest + needs: build-environment + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + - uses: actions/download-artifact@v3 + + - name: Setup JHbuild + run: | + ln -sf $PWD/osx/jhbuildrc-custom $HOME/.jhbuildrc-custom + /bin/bash -c "$(curl -fsSL https://gitlab.gnome.org/GNOME/gtk-osx/raw/master/gtk-osx-setup.sh)" + + - name: Extract Environment + working-directory: / + shell: 'bash' + run: | + brew install git ccache autoconf libtool automake pkg-config sassc optipng python bison flex cmake itstool gnu-sed intltool + pwd + mkdir -p $HOME/Source + tar -xzf /Users/runner/work/meld/meld/Environment/environment.tar.gz + rm -f /Users/runner/work/meld/meld/Environment/environment.tar.gz + ls $HOME/gtk + + - name: FIX gir + run: | + cd osx && /bin/bash ./fix_gir.sh + + - name: Install Icon Theme + run: | + alias sed=gsed + cd osx && /bin/bash ./build_icon_theme.sh + + - name: Install GTK Theme + run: | + cd osx && /bin/bash ./build_gtk_theme.sh + + - name: Package + run: | + ~/.new_local/bin/jhbuild run osx/build_app.sh - + - name: Upload Artifact + uses: actions/upload-artifact@v3.1.3 + with: + name: Package + path: | + osx/Archives/meldmerge.dmg diff --git a/bin/meld b/bin/meld index a413aace2..93e451ab8 100755 --- a/bin/meld +++ b/bin/meld @@ -47,9 +47,9 @@ if gtk_theme is None: from Foundation import NSUserDefaults standardUserDefaults = NSUserDefaults.standardUserDefaults() if standardUserDefaults.stringForKey_("AppleInterfaceStyle") == 'Dark': - os.environ['GTK_THEME'] = "Meld-Os-Catalina-gtk:dark" + os.environ['GTK_THEME'] = "WhiteSur-Dark-solid" else: - os.environ['GTK_THEME'] = "Meld-Os-Catalina-gtk:light" + os.environ['GTK_THEME'] = "WhiteSur-Light-solid" except: pass else: diff --git a/osx/build_app.sh b/osx/build_app.sh index a140cbf54..3e413efbc 100755 --- a/osx/build_app.sh +++ b/osx/build_app.sh @@ -22,6 +22,7 @@ INSTROOT="$HOME/gtk/inst/" CODE_SIGN_ID="" INSTALLER_CODE_SIGN_ID="" + # TODO: Move this to build_env.sh #icon_sizes=( "16" "22" "24" "32" "48" "64" "72" "96" "128" "256" "512" ) #for icon_size in ${icon_sizes[@]}; do @@ -30,29 +31,27 @@ INSTALLER_CODE_SIGN_ID="" # -o ${INSTROOT}/share/icons/hicolor/${icon_size}x${icon_size}/apps/org.gnome.Meld.png #done; #(cd ${INSTROOT}/share/icons/hicolor/ && gtk-update-icon-cache -fqt .) +# intltool cp meld/conf.py.in meld/conf.py.in.orig cp osx/conf.py meld/conf.py -python3 -c "import sys; print('\n'.join(sys.path))" +${INSTROOT}/bin/python3 -c "import sys; print('\n'.join(sys.path))" + +PY_SITE_PACKAGES=$(~/gtk/inst/bin/python3 -c 'import site; print(site.getsitepackages()[0], end="")') +/usr/local/bin/pip3 install --upgrade --force-reinstall distro pyobjc-core pyobjc-framework-Cocoa py2app six pygments --target $PY_SITE_PACKAGES glib-compile-schemas data -python3 setup_py2app.py build -python3 setup_py2app.py py2app --use-faulthandler +${INSTROOT}/bin/python3 setup_py2app.py build +${INSTROOT}/bin/python3 setup_py2app.py py2app --use-faulthandler mv meld/conf.py.in.orig meld/conf.py.in rm meld/conf.py -# py2app copies all Python framework to target.. -# too busy to figure out how to solve this at the moment. Let's just -# delete the files after they've been copied. -# rm -fr $FRAMEWORKS/Python.framework - # icon themes -rsync -r -t --ignore-existing ${INSTROOT}/share/icons/Adwaita ${RES}/share/icons +rsync -r -t --ignore-existing ${INSTROOT}/share/icons/Meld-WhiteSur-Icons ${RES}/share/icons rsync -r -t --ignore-existing ${INSTROOT}/share/icons/hicolor ${RES}/share/icons -rsync -r -t --ignore-existing ${INSTROOT}/share/icons/Os-Catalina-icons ${RES}/share/icons -(cd ${RES}/share/icons && ln -sf Os-Catalina-icons MeldIcons) +(cd ${RES}/share/icons && ln -sf Meld-WhiteSur-Icons MeldIcons) # glib schemas rsync -r -t $INSTROOT/share/glib-2.0/schemas $RES/share/glib-2.0 @@ -74,10 +73,11 @@ gdk-pixbuf-query-loaders | sed s=\".*/lib/gdk-pixbuf-2.0=\"@executable_path/\.\ mkdir -p $RES/share/themes rsync -r -t $INSTROOT/share/themes/Default/ $RES/share/themes/Default rsync -r -t $INSTROOT/share/themes/Mac/ $RES/share/themes/Mac +rsync -r -t $INSTROOT/share/themes/WhiteSur-Dark-solid/ $RES/share/themes/WhiteSur-Dark-solid +rsync -r -t $INSTROOT/share/themes/WhiteSur-Light-solid/ $RES/share/themes/WhiteSur-Light-solid rsync -r -t $INSTROOT/share/gtksourceview-4 $RES/share -mkdir -p $RES/share/themes/Meld-Os-Catalina-gtk/gtk-3.0 -rsync -r -t --ignore-existing $INSTROOT/share/themes/Meld-Os-Catalina-gtk/gtk-3.0 $RES/share/themes/Meld-Os-Catalina-gtk -cp $INSTROOT/share/themes/Mac/gtk-3.0/gtk-keys.css $RES/share/themes/Meld-Os-Catalina-gtk/gtk-3.0/gtk-keys.css +cp $INSTROOT/share/themes/Mac/gtk-3.0/gtk-keys.css $RES/share/themes/WhiteSur-Light-solid/gtk-3.0/gtk-keys.css +cp $INSTROOT/share/themes/Mac/gtk-3.0/gtk-keys.css $RES/share/themes/WhiteSur-Dark-solid/gtk-3.0/gtk-keys.css # meld specific resources mkdir -p $RES/share/meld @@ -99,7 +99,7 @@ rsync -r -t data/icons/* $RES/share/icons # rm -fr ${RES}/share/icons/Adwaita/${icon_size}x${icon_size}/categories/ || true # rm -fr ${RES}/share/icons/Adwaita/${icon_size}x${icon_size}/status/ || true # done; -(cd $RES/share/icons/Adwaita && gtk-update-icon-cache -fqt .) +# (cd $RES/share/icons/Adwaita && gtk-update-icon-cache -fqt .) # update icon cache for hicolor (cd $RES/share/icons/hicolor && gtk-update-icon-cache -fqt .) @@ -121,19 +121,7 @@ rsync -r -t $INSTROOT/lib/gobject-introspection $RES/lib # copy some libraries that py2app misses mkdir -p $FRAMEWORKS -rsync -t $INSTROOT/lib/libglib-2.0.0.dylib $FRAMEWORKS/libglib-2.0.0.dylib -rsync -t $INSTROOT/lib/libcairo-gobject.2.dylib $FRAMEWORKS/libcairo-gobject.2.dylib -# rsync -t $INSTROOT/lib/libcairo-script-interpreter.2.dylib $FRAMEWORKS/libcairo-script-interpreter.2.dylib -rsync -t $INSTROOT/lib/libcairo.2.dylib $FRAMEWORKS/libcairo.2.dylib -rsync -t $INSTROOT/lib/libpangocairo-1.0.0.dylib $FRAMEWORKS/libpangocairo-1.0.0.dylib -rsync -t $INSTROOT/lib/libatk-1.0.0.dylib $FRAMEWORKS/libatk-1.0.0.dylib -rsync -t $INSTROOT/lib/libgio-2.0.0.dylib $FRAMEWORKS/libgio-2.0.0.dylib -rsync -t $INSTROOT/lib/libgobject-2.0.0.dylib $FRAMEWORKS/libgobject-2.0.0.dylib -rsync -t $INSTROOT/lib/libpango-1.0.0.dylib $FRAMEWORKS/libpango-1.0.0.dylib -rsync -t $INSTROOT/lib/libpangoft2-1.0.0.dylib $FRAMEWORKS/libpangoft2-1.0.0.dylib -rsync -t $INSTROOT/lib/libgtk-3.0.dylib $FRAMEWORKS/libgtk-3.0.dylib -rsync -t $INSTROOT/lib/libgtksourceview-4.0.dylib $FRAMEWORKS/libgtksourceview-4.0.dylib -rsync -t $INSTROOT/lib/libgtkmacintegration-gtk3.2.dylib $FRAMEWORKS/libgtkmacintegration-gtk3.2.dylib +rsync -t $INSTROOT/lib/*.dylib $FRAMEWORKS/ # rename script, use wrapper #mv $MAIN/Contents/MacOS/Meld $MAIN/Contents/MacOS/Meld-bin @@ -234,6 +222,7 @@ popd # Compress the dmg file.. cp osx/DS_Store /Volumes/Meld\ Merge/.DS_Store +sync hdiutil detach $DEV hdiutil convert myimg.dmg -format UDZO -o meldmerge.dmg diff --git a/osx/build_env.sh b/osx/build_env.sh index 261c5a1a9..cd465526e 100755 --- a/osx/build_env.sh +++ b/osx/build_env.sh @@ -12,12 +12,11 @@ failure() { } trap 'failure ${LINENO} "$BASH_COMMAND"' ERR -export MACOSX_DEPLOYMENT_TARGET=10.15 export PATH=$HOME/.new_local/bin:$HOME/gtk/inst/bin:$PATH mkdir -p $HOME/gtk/inst/bin -#brew install autoconf libtool automake pkg-config sassc optipng python bison flex +#brew install autoconf libtool automake pkg-config sassc optipng python bison flex cmake itstool xz ln -sf /usr/local/bin/autoconf ~/gtk/inst/bin ln -sf /usr/local/bin/autoreconf ~/gtk/inst/bin ln -sf /usr/local/bin/automake ~/gtk/inst/bin @@ -28,26 +27,100 @@ ln -sf /usr/local/bin/glibtoolize ~/gtk/inst/bin/libtoolize ln -sf /usr/local/bin/glibtool ~/gtk/inst/bin/libtool ln -sf /usr/local/bin/cmake ~/gtk/inst/bin ln -sf /usr/local/opt/bison/bin/bison ~/gtk/inst/bin - -#brew install python3 ccache -#brew tap homebrew/cask -#brew cask install inkscape -#brew install sassc -#brew install optipng -#brew install imagemagick -#brew install librsvg +ln -sf /usr/local/bin/itstool ~/gtk/inst/bin +ln -sf /usr/local/bin/xz ~/gtk/inst/bin pushd . > /dev/null -#jhbuild bootstrap export PKG_CONFIG_PATH=$HOME/gtk/inst/lib/pkgconfig:$HOME/gtk/inst/share/pkgconfig +export PKG_CONFIG_LIBDIR==$HOME/gtk/inst/lib/pkgconfig export XDG_DATA_DIRS=$HOME/gtk/inst/share -jhbuild buildone libffi python3 libxml2 -(cd $HOME/gtk/inst/bin && touch itstool && chmod +x itstool) -/usr/local/bin/pip3 install six pygments --target ~/gtk/inst/lib/python3.9/site-packages -PYTHON=$HOME/gtk/inst/bin/python3 jhbuild build --nodeps --ignore-suggests #-s freetype-no-harfbuzz -/usr/local/bin/pip3 install pyobjc-core pyobjc-framework-Cocoa py2app --target ~/gtk/inst/lib/python3.9/site-packages +[ -d $HOME/gtk/inst/lib/gettext ] || \ +( + cd $HOME/Source + rm -fr libiconv-1.17 libiconv-1.17.tar.gz || true + curl -OL https://ftp.gnu.org/gnu/libiconv/libiconv-1.17.tar.gz + tar xf libiconv-1.17.tar.gz + cd libiconv-1.17 + jhbuild run ./configure --disable-debug \ + --disable-dependency-tracking \ + --enable-extra-encodings \ + --enable-static \ + --disable-shared \ + --prefix=$HOME/gtk/inst + jhbuild run make -j8 + jhbuild run make install + + cd $HOME/Source/ + rm -fr gettext-0.22.3 gettext-0.22.3.tar.xz || true + curl -OL https://ftp.gnu.org/gnu/gettext/gettext-0.22.3.tar.xz + tar xf gettext-0.22.3.tar.xz + cd gettext-0.22.3 + jhbuild run ./configure --without-emacs \ + --disable-silent-rules \ + --disable-java \ + --disable-native-java \ + --disable-libasprintf \ + --disable-csharp \ + --with-included-glib \ + --with-included-libcroco \ + --with-included-gettext \ + --with-included-libunistring \ + --without-git \ + --without-cvs \ + --without-xz \ + --prefix=$HOME/gtk/inst + jhbuild run make -j8 + jhbuild run make install + + cd $HOME/Source/libiconv-1.17 +) + +# jhbuild bootstrap +jhbuild buildone libffi zlib +# For later - perhaps make python use this library instead. +# (cd $HOME/Source/ && rm -fr tinygettext || true) +# (cd $HOME/Source/ && git clone https://github.com/tinygettext/tinygettext) +# (cd $HOME/Source/tinygettext/external && rm -fr tinycmmc) +# (cd $HOME/Source/tinygettext/external && git clone https://github.com/Grumbel/tinycmmc) +# (cd $HOME/Source/tinygettext && mkdir -p build && cd build && cmake .. && make -j8 && cmake --install . --prefix $HOME/gtk/inst) + +# For now: stub gettext +# ( +# cd $HOME/Source/ +# rm -fr gettext-tiny || true +# git clone https://github.com/sabotage-linux/gettext-tiny +# cd $HOME/Source/gettext-tiny +# #gsed -i 's=/usr/local=/=g' Makefile; +# make LIBINTL=NOOP DESTDIR=$HOME/gtk/inst prefix=/ install +# #DESTDIR=$HOME/gtk/inst make install +# ) + +jhbuild buildone python3 + + + +#PYTHON=$HOME/gtk/inst/bin/python3 PYTHON_CFLAGS=-I$HOME/gtk/inst/include/python3.11 +jhbuild buildone libxml2 +#(cd $HOME/gtk/inst/bin && touch itstool && chmod +x itstool) + +PY_SITE_PACKAGES=$(~/gtk/inst/bin/python3 -c 'import site; print(site.getsitepackages()[0], end="")') +/usr/local/bin/pip3 install six pygments --target $PY_SITE_PACKAGES + +# Build all the way up to freetype, then fix its pkg-config +PYTHON=$HOME/gtk/inst/bin/python3 jhbuild build freetype +gsed -i '/^Requires.private.*/d' $HOME/gtk/inst/lib/pkgconfig/freetype2.pc + +# Continue +PYTHON=$HOME/gtk/inst/bin/python3 jhbuild build #-s freetype-no-harfbuzz +/usr/local/bin/pip3 install pyobjc-core pyobjc-framework-Cocoa py2app --target $PY_SITE_PACKAGES + +cat $HOME/gtk/inst/lib/pkgconfig/epoxy.pc | grep -v x11 > $HOME/gtk/inst/lib/pkgconfig/epoxy.pc.1 +mv $HOME/gtk/inst/lib/pkgconfig/epoxy.pc $HOME/gtk/inst/lib/pkgconfig/epoxy.pc.orig +mv $HOME/gtk/inst/lib/pkgconfig/epoxy.pc.1 $HOME/gtk/inst/lib/pkgconfig/epoxy.pc + +jhbuild buildone gtksourceview3 gtk-mac-integration gtk-mac-integration-python # (cd $HOME/gtk/inst/lib && ln -s libpython3.6m.dylib libpython3.6.dylib) # (cd $HOME/Source/ && ([ -d Mojave-gtk-theme ] || git clone https://github.com/vinceliuice/Mojave-gtk-theme.git)) @@ -56,12 +129,14 @@ PYTHON=$HOME/gtk/inst/bin/python3 jhbuild build --nodeps --ignore-suggests #-s f # (cd $HOME/gtk/inst/share/themes && ln -sf Mojave-light-solid-alt Meld-Mojave-light) pushd . -cd $HOME/Source -curl -OL https://download.gnome.org/sources/gtksourceview/3.24/gtksourceview-3.24.7.tar.xz -tar xvf gtksourceview-3.24.7.tar.xz && cd gtksourceview-3.24.7 -jhbuild run ./configure --prefix $HOME/gtk/inst --enable-introspection=yes --enable-gtk-doc-html=no --with-sysroot=$HOME/gtk/inst -jhbuild run make install -j -popd +# cd $HOME/Source +# GTKSRCVIEW=gtksourceview-4.8.4 +# curl -OL https://download.gnome.org/sources/gtksourceview/4.8/gtksourceview-4.8.4.tar.xz +# tar xvf ${GTKSRCVIEW}.tar.xz +# mkdir -p ${GTKSRCVIEW}/build && cd ${GTKSRCVIEW}/build +# jhbuild run meson setup --prefix=$HOME/gtk/inst --buildtype=release --optimization 3 -Dvapi=false $HOME/Source/${GTKSRCVIEW} # --Denable-introspection=yes --Denable-gtk-doc-html=no --with-sysroot=$HOME/gtk/inst +# jhbuild run ninja install +# popd cp settings.ini $HOME/gtk/inst/etc/gtk-3.0/ popd @@ -71,21 +146,22 @@ popd # gir files without the prefix/full path to the library. # We want the prefixes. We'll edit them manually later in build_app to point # to the ones we include. -WORKDIR=$(mktemp -d) -for i in $(find $HOME/gtk/inst/share/gir-1.0 -name *.gir); do - if [ `grep shared-library=\"lib* ${i}` ]; then - gir=$(echo $(basename $i)) - - typelib=${gir%.*}.typelib - echo Processing $gir to ${WORKDIR}/$typelib - - cat $i | sed s_"shared-library=\""_"shared-library=\"$HOME/gtk/inst/lib/"_g > ${WORKDIR}/$gir - cp ${WORKDIR}/$gir $HOME/gtk/inst/share/gir-1.0 - $HOME/gtk/inst/bin/g-ir-compiler ${WORKDIR}/$gir -o ${WORKDIR}/$typelib - fi -done -cp ${WORKDIR}/*.typelib $HOME/gtk/inst/lib/girepository-1.0 -rm -fr ${WORKDIR} +# Moving to fix-gir script.. +# WORKDIR=$(mktemp -d) +# for i in $(find $HOME/gtk/inst/share/gir-1.0 -name *.gir); do +# if [ `grep shared-library=\"lib* ${i}` ]; then +# gir=$(echo $(basename $i)) + +# typelib=${gir%.*}.typelib +# echo Processing $gir to ${WORKDIR}/$typelib + +# cat $i | sed s_"shared-library=\""_"shared-library=\"$HOME/gtk/inst/lib/"_g > ${WORKDIR}/$gir +# cp ${WORKDIR}/$gir $HOME/gtk/inst/share/gir-1.0 +# $HOME/gtk/inst/bin/g-ir-compiler ${WORKDIR}/$gir -o ${WORKDIR}/$typelib +# fi +# done +# cp ${WORKDIR}/*.typelib $HOME/gtk/inst/lib/girepository-1.0 +# rm -fr ${WORKDIR} exit diff --git a/osx/build_gtk_theme.sh b/osx/build_gtk_theme.sh new file mode 100755 index 000000000..40c6af1ba --- /dev/null +++ b/osx/build_gtk_theme.sh @@ -0,0 +1,29 @@ +#!/bin/bash -x + +set -o nounset +set -o errexit +set -o functrace + +trap "exit" INT +failure() { + local lineno=$1 + local msg=$2 + echo "Failed at $lineno: $msg" +} +trap 'failure ${LINENO} "$BASH_COMMAND"' ERR + +export PATH=$HOME/.new_local/bin:$HOME/gtk/inst/bin:$PATH + +#FIXME: This theme is pretty big and can be significantly reduced in size for our need. Perhaps ask for volunteers. + +curl -LSs https://raw.githubusercontent.com/vinceliuice/WhiteSur-gtk-theme/master/release/WhiteSur-Light-solid.tar.xz -o $HOME/Source/WhiteSur-Light-solid.tar.xz +curl -LSs https://raw.githubusercontent.com/vinceliuice/WhiteSur-gtk-theme/master/release/WhiteSur-Dark-solid.tar.xz -o $HOME/Source/WhiteSur-Dark-solid.tar.xz + +(cd $HOME/Source && tar xf WhiteSur-Light-solid.tar.xz) +(cd $HOME/Source && tar xf WhiteSur-Dark-solid.tar.xz) + +cp -RP $HOME/Source/WhiteSur-Light-solid $HOME/gtk/inst/share/themes +cp -RP $HOME/Source/WhiteSur-Dark-solid $HOME/gtk/inst/share/themes + +cp $HOME/gtk/inst/share/themes/Mac/gtk-3.0/gtk-keys.css $HOME/Source/WhiteSur-Dark-solid/gtk-3.0/ +cp $HOME/gtk/inst/share/themes/Mac/gtk-3.0/gtk-keys.css $HOME/Source/WhiteSur-Light-solid/gtk-3.0/ \ No newline at end of file diff --git a/osx/build_icon_theme.sh b/osx/build_icon_theme.sh new file mode 100755 index 000000000..bdb88c55d --- /dev/null +++ b/osx/build_icon_theme.sh @@ -0,0 +1,120 @@ +#!/bin/bash -x + +set -o nounset +set -o errexit +set -o functrace + +trap "exit" INT +failure() { + local lineno=$1 + local msg=$2 + echo "Failed at $lineno: $msg" +} +trap 'failure ${LINENO} "$BASH_COMMAND"' ERR + +export PATH=$HOME/.new_local/bin:$HOME/gtk/inst/bin:$PATH + +#FIXME: This theme is pretty big and can be significantly reduced in size for our need. Perhaps ask for volunteers. + +curl -LSs https://codeload.github.com/vinceliuice/WhiteSur-icon-theme/tar.gz/refs/tags/2023-07-03 -o $HOME/Source/WhiteSur-icon-theme-2023-07-03.tar.gz +(cd $HOME/Source && tar xf WhiteSur-icon-theme-2023-07-03.tar.gz) + +# Ths installer was never meant to install for macOS, so we have to craft our own version +# based on what's inside the installer shell script. +# This: +# ./install -d $HOME/gtk/inst/share/icons -n Meld-WhiteSur-Icons +# won't work for us.. + +# So the following is mostly based on install.sh that comes with the theme. + +SRC_DIR=$HOME/Source/WhiteSur-icon-theme-2023-07-03 +theme="" +color="-dark" + +THEME_NAME=Meld-WhiteSur-Icons +name=$THEME_NAME +THEME_DIR=$HOME/gtk/inst/share/icons/${THEME_NAME} +dest=$HOME/gtk/inst/share/icons +[[ -d ${THEME_DIR} ]] && rm -rf ${THEME_DIR} + +echo "Installing to '${THEME_DIR}'..." + +mkdir -p ${THEME_DIR} +cp -RP "${SRC_DIR}"/{COPYING,AUTHORS} ${THEME_DIR} +cp -RP "${SRC_DIR}"/src/index.theme ${THEME_DIR} + +gsed -i "s/WhiteSur/Meld-Icons/g" ${THEME_DIR}/index.theme + +mkdir -p ${THEME_DIR}/status +cp -RP "${SRC_DIR}"/src/{actions,animations,apps,categories,devices,emblems,mimes,places} ${THEME_DIR} +cp -RP "${SRC_DIR}"/src/status/{16,22,24,32,symbolic} ${THEME_DIR}/status + +cp -RP "${SRC_DIR}"/links/{actions,apps,categories,devices,emblems,mimes,places,status} ${THEME_DIR} + +if [[ ${theme} != '' ]]; then + cp -RP "${SRC_DIR}"/colors/color${theme}/*.svg ${THEME_DIR}/places/scalable +fi + +if [[ ${color} == '-dark' ]]; then + mkdir -p ${THEME_DIR}/{apps,categories,emblems,devices,mimes,places,status} + + cp -cRP "${SRC_DIR}"/src/actions ${THEME_DIR} + cp -cRP "${SRC_DIR}"/src/apps/symbolic ${THEME_DIR}/apps + cp -cRP "${SRC_DIR}"/src/categories/symbolic ${THEME_DIR}/categories + cp -cRP "${SRC_DIR}"/src/emblems/symbolic ${THEME_DIR}/emblems + cp -cRP "${SRC_DIR}"/src/mimes/symbolic ${THEME_DIR}/mimes + cp -cRP "${SRC_DIR}"/src/devices/{16,22,24,symbolic} ${THEME_DIR}/devices + cp -cRP "${SRC_DIR}"/src/places/{16,22,24,symbolic} ${THEME_DIR}/places + cp -cRP "${SRC_DIR}"/src/status/{16,22,24,symbolic} ${THEME_DIR}/status + + if [[ ${bold:-} == 'true' ]]; then + cp -RP "${SRC_DIR}"/bold/* ${THEME_DIR} + fi + + # if [[ $DESKTOP_SESSION == '/usr/share/xsessions/budgie-desktop' ]]; then + # cp -RP "${SRC_DIR}"/src/status/symbolic-budgie/*.svg ${THEME_DIR}/status/symbolic + # fi + + # Change icon color for dark theme + find "${THEME_DIR}"/{actions,devices,places,status}/{16,22,24}/ -type f -exec gsed -i "s/#363636/#dedede/g" {} \; + find "${THEME_DIR}"/actions/32/ -type f -exec gsed -i "s/#363636/#dedede/g" {} \; + find "${THEME_DIR}"/{actions,apps,categories,emblems,devices,mimes,places,status}/symbolic -type f -exec gsed -i "s/#363636/#dedede/g" {} \; + + #cp -cRPf "${SRC_DIR}"/links/actions/{16,22,24,32,symbolic} ${THEME_DIR}/actions + #cp -cRPf "${SRC_DIR}"/links/devices/{16,22,24,symbolic} ${THEME_DIR}/devices + #cp -cRPf "${SRC_DIR}"/links/places/{16,22,24,symbolic} ${THEME_DIR}/places + #cp -cRPf "${SRC_DIR}"/links/status/{16,22,24,symbolic} ${THEME_DIR}/status + #cp -cRPf "${SRC_DIR}"/links/apps/symbolic ${THEME_DIR}/apps + #cp -cRPf "${SRC_DIR}"/links/categories/symbolic ${THEME_DIR}/categories + #cp -cRPf "${SRC_DIR}"/links/mimes/symbolic ${THEME_DIR}/mimes + + #TODO: Those are breaking.. Later though when we have some time.. + # cd ${dest} + # ln -s ../${name}${theme}/animations ${name}${theme}-dark/animations + # ln -s ../../${name}${theme}/categories/32 ${name}${theme}-dark/categories/32 + # ln -s ../../${name}${theme}/emblems/16 ${name}${theme}-dark/emblems/16 + # ln -s ../../${name}${theme}/emblems/22 ${name}${theme}-dark/emblems/22 + # ln -s ../../${name}${theme}/emblems/24 ${name}${theme}-dark/emblems/24 + # ln -s ../../${name}${theme}/mimes/16 ${name}${theme}-dark/mimes/16 + # ln -s ../../${name}${theme}/mimes/22 ${name}${theme}-dark/mimes/22 + # ln -s ../../${name}${theme}/mimes/scalable ${name}${theme}-dark/mimes/scalable + # ln -s ../../${name}${theme}/apps/scalable ${name}${theme}-dark/apps/scalable + # ln -s ../../${name}${theme}/devices/scalable ${name}${theme}-dark/devices/scalable + # ln -s ../../${name}${theme}/places/scalable ${name}${theme}-dark/places/scalable + # ln -s ../../${name}${theme}/status/32 ${name}${theme}-dark/status/32 +fi + +( + cd ${THEME_DIR} + ln -sf actions actions@2x + ln -sf animations animations@2x + ln -sf apps apps@2x + ln -sf categories categories@2x + ln -sf devices devices@2x + ln -sf emblems emblems@2x + ln -sf mimes mimes@2x + ln -sf places places@2x + ln -sf status status@2x +) + +gtk-update-icon-cache ${THEME_DIR} diff --git a/osx/conf.py b/osx/conf.py index 193b30b93..bcd4ff0df 100644 --- a/osx/conf.py +++ b/osx/conf.py @@ -2,10 +2,13 @@ import os import sys from pathlib import Path -from Foundation import NSBundle +try: + from Foundation import NSBundle +except: + pass __package__ = "meld" -__version__ = "3.21.0.osx3" +__version__ = "3.21.0.osx4" APPLICATION_NAME = 'Meld' APPLICATION_ID = 'org.gnome.Meld' diff --git a/osx/fix_gir.sh b/osx/fix_gir.sh index 7eaa1210f..067481c5c 100755 --- a/osx/fix_gir.sh +++ b/osx/fix_gir.sh @@ -12,18 +12,20 @@ failure() { } trap 'failure ${LINENO} "$BASH_COMMAND"' ERR -export MACOSX_DEPLOYMENT_TARGET=10.9 export PATH=$HOME/.new_local/bin:$HOME/gtk/inst/bin:$PATH # Seems like the build system changed for introspection. We now get many # gir files without the prefix/full path to the library. # We want the prefixes. We'll edit them manually later in build_app to point # to the ones we include. +# TEMP=$(openssl rand -hex 12) WORKDIR=$(mktemp -d) for i in $(find $HOME/gtk/inst/share/gir-1.0 -name *.gir); do + echo Checking: ${i} + cat ${i} | grep "shared-library" || true if [ `grep shared-library=\"lib* ${i}` ]; then gir=$(echo $(basename $i)) - + echo Fixing: ${gir} typelib=${gir%.*}.typelib echo Processing $gir to ${WORKDIR}/$typelib @@ -32,6 +34,6 @@ for i in $(find $HOME/gtk/inst/share/gir-1.0 -name *.gir); do $HOME/gtk/inst/bin/g-ir-compiler ${WORKDIR}/$gir -o ${WORKDIR}/$typelib fi done -cp ${WORKDIR}/*.typelib $HOME/gtk/inst/lib/girepository-1.0 +cp ${WORKDIR}/*.typelib $HOME/gtk/inst/lib/girepository-1.0 2>/dev/null || : rm -fr ${WORKDIR} diff --git a/osx/jhbuildrc-custom b/osx/jhbuildrc-custom index c606e1485..509f4f292 100644 --- a/osx/jhbuildrc-custom +++ b/osx/jhbuildrc-custom @@ -6,9 +6,14 @@ print("Using Meld for OSX customization") import os.path from os import path +# Reference: https://gnome.pages.gitlab.gnome.org/jhbuild/config-reference.html + + #prefix = "/tmp/meldroot" checkoutroot = os.path.expanduser("~/Source/gtk") -setup_sdk(target="10.15", sdk_version="native", architectures=["x86_64"]) +setup_sdk() +setup_release() +os.environ['CONFIG_SHELL'] = '/bin/bash' _gtk_osx_use_jhbuild_python = True if path.exists("/usr/local/bin/ccache"): @@ -20,34 +25,38 @@ else: os.environ["CC"] = "/usr/bin/clang" os.environ["CXX"] = "/usr/bin/clang++" -os.environ["DYLD_FALLBACK_LIBRARY_PATH"] = "@executable_path/../Frameworks/:@executable_path/../Resources/lib" -#environ_prepend('CFLAGS', "-O3") -environ_prepend('CXXFLAGS', "-std=c++11 -stdlib=libc++") -#environ_prepend('OBJCFLAGS', "-O2") -os.environ["MACOSX_DEPLOYMENT_TARGET"] = "10.15" +environ_prepend('CXXFLAGS', '-std=c++11 -stdlib=libc++') + -#skip.append("libiconv") # Lion issues +# From modulesets skip.append("icu") skip.append("cups") skip.append("gnome-themes-standard") skip.append("berkeleydb") skip.append("berkeleydb-nonsrctree") skip.append("gnome-user-docs") -skip.append("cmake") -skip.append("openssl") # We'll install it manually +skip.append("openssl") skip.append("python") skip.append("python3") # We'll install it manually -#skip.append("libxml2") # We'll install it manually -#skip.append("gtk-doc") skip.append("itstool") +skip.append("libtiff") skip.append("libxslt") skip.append("yelp-xsl") skip.append("yelp-tools") -#skip.append("gobject-introspection") skip.append("pygobject") skip.append("xorg-util-macros") skip.append('mozilla') skip.append('pulseaudio') +#skip.append('gtk-mac-integration') +#skip.append('gtk-mac-integration-python') +skip.append('adwaita-icon-theme') +skip.append('gtk-4') # only for gtksourceview4 + +#sourceview4 +# graphene +# sass +# gtk-4 + # moduleset="https://gitlab.gnome.org/GNOME/gtk-osx/raw/master/modulesets-unstable/gtk-osx.modules" @@ -59,67 +68,59 @@ skip.append('pulseaudio') # yelp-tools modules = [ - "zlib", "libjpeg", "libtiff", "libpng", + "zlib", + "libjpeg", + #"libtiff", + "libpng", "glib", "fribidi", "gtk-doc", - "pango", "gdk-pixbuf", "librsvg", + "pango", + "gdk-pixbuf", + "librsvg", "meta-gtk-osx-gtk3", "meta-gtk-osx-python3-gtk3", "gsettings-desktop-schemas", "adwaita-icon-theme" ] -#"gtksourceview3", +# global autogenargs +# autogenargs = autogenargs + ' --disable-documentation --disable-docs --enable-introspection --enable-gtk-doc=no --enable-gtk-doc-html=no --enable-gtk-doc-pdf=no' -#moduleset="http://git.gnome.org/browse/gtk-osx/plain/modulesets/gtk-osx.modules" +# Temporarily until modulesets are fixed... +branches["openssl"] = "https://ftp.openssl.org/source/old/1.1.1/openssl-1.1.1c.tar.gz" -#prefix = os.path.join(os.environ["HOME"], "meld") +#module_extra_env['gettext-tools'] = 'CC=/usr/bin/clang CFLAGS=-O LDFLAGS=-L/usr/lib' +#module_autogenargs['gettext'] = ' --disable-rpath --enable-relocatable --disable-c++ --disable-java --disable-native-java --disable-curses --without-emacs --without-bzip2' -global autogenargs -autogenargs = autogenargs + ' --disable-documentation --disable-docs --enable-introspection --enable-gtk-doc=no --enable-gtk-doc-html=no --enable-gtk-doc-pdf=no' -# autogenargs += ' --cache-file=' + checkoutroot + '/autoconf-cache ' +#module_autogenargs['zlib'] = '' +module_autogenargs['yelp'] = '--disable-Werror' +module_autogenargs['librsvg'] = '--disable-Bsymbolic --enable-pixbuf-loader --enable-shared=yes --enable-static=yes '# + autogenargs +module_autogenargs['gobject-introspection'] = '--with-cairo=yes '# + autogenargs +module_autogenargs['tango-icon-theme'] ='--disable-nls --disable-icon-framing '# + autogenargs +module_autogenargs['harfbuzz'] = '--disable-gtk-doc --disable-gtk-doc-html --disable-gtk-doc-pdf --with-coretext --without-icu '# + autogenargs +module_autogenargs['root-harfbuzz'] = '--disable-gtk-doc --disable-gtk-doc-html --disable-gtk-doc-pdf --with-coretext --without-icu '# + autogenargs +module_autogenargs['fontconfig'] = '--with-cache-dir="~/Library/Caches/org.gnome.meld.fontconfig" --with-default-fonts=/System/Library/Fonts --with-add-fonts=/Library/Fonts,/Network/Library/Fonts,/System/Library/Fonts --disable-cache-build --disable-docs --disable-dependency-tracking' +#module_autogenargs['python3'] = '--enable-optimizations --disable-ipv6 --with-ensurepip=yes --with-system-expat --without-readline --with-pkg-config --disable-test-modules ' -# Temporarily until modulesets are fixed... -branches["openssl"] = "https://ftp.openssl.org/source/old/1.1.1/openssl-1.1.1c.tar.gz" +module_autogenargs['libxml2'] = '--with-zlib --enable-ipv6=no ' +module_autogenargs['cairo'] = '--disable-full-testing --disable-trace --enable-ft --enable-fc --enable-quartz-image --enable-quartz-font --enable-quartz --enable-png --enable-svg --enable-tee --enable-xml --enable-gobject --enable-pthread --disable-valgrind --disable-gtk-doc --disable-gtk-doc-html --disable-dependency-tracking '# + autogenargs + +module_mesonargs['atk'] = '--buildtype release --optimization 3 -Ddocs=false -Dintrospection=true' +module_mesonargs['gdk-pixbuf'] = '--buildtype release --optimization 3 -Dbuiltin_loaders=all -Drelocatable=true -Ddocs=false' +module_mesonargs['glib'] = '--buildtype release --optimization 3 -Dbsymbolic_functions=false -Dgtk_doc=false -Db_bitcode=true -Db_ndebug=true' +module_mesonargs['pango'] = '--buildtype release --optimization 3 -Dintrospection=enabled' +module_mesonargs['pygobject3'] = '--buildtype release --optimization 3 -Dtests=false -Dpycairo=enabled' +module_mesonargs['gtksourceview4'] = '--buildtype release --optimization 3 -Dvapi=false' +module_mesonargs['gtk+-3.0'] = '--buildtype release --optimization 3 -Dx11_backend=false -Dwayland_backend=false -Dbroadway_backend=false -Dwin32_backend=false -Dquartz_backend=true -Dxinerama=no -Dcloudproviders=false -Dprofiler=false -Dtracker3=false -Dcolord=no -Dgtk_doc=false -Dman=false -Dintrospection=true -Ddemos=false -Dexamples=false -Dtests=false -Dinstalled_tests=false -Dbuiltin_immodules=yes' -module_autogenargs['gettext-tools'] = 'CFLAGS=-O' -module_autogenargs['gettext'] = '--disable-rpath --disable-option-checking --disable-nls --enable-relocatable --disable-java --disable-native-java --disable-curses --without-emacs --without-bzip2 CFLAGS=-O2' -module_autogenargs['yelp'] = '--disable-Werror' -module_autogenargs['zlib']= ''# + autogenargs -module_autogenargs['librsvg'] = '--disable-Bsymbolic --enable-pixbuf-loader --enable-shared=yes --enable-static=yes ' + autogenargs -module_autogenargs['cairo'] = '--disable-full-testing --disable-trace --enable-ft --enable-fc --enable-quartz-image --enable-quartz-font --enable-quartz --enable-png --enable-svg --enable-tee --enable-xml --enable-gobject --enable-pthread --disable-valgrind --disable-gtk-doc --disable-gtk-doc-html --disable-dependency-tracking ' + autogenargs -module_autogenargs['gobject-introspection']= '--with-cairo=yes ' + autogenargs -module_autogenargs['tango-icon-theme']='--disable-nls --disable-icon-framing ' + autogenargs -module_autogenargs['gtk+-3.0'] = '--enable-quartz-backend --enable-quartz-relocation --disable-Bsymbolic --disable-cloudprint --with-included-immodules=am-et,cedilla,cyrillic-translit,inuktitut,ipa,multipress,thai,ti-er,ti-et,viqr --disable-modules --disable-rpath --disable-cups --disable-papi --disable-cloudprint --disable-gtk-doc --disable-gtk-doc-html --disable-gtk-doc-pdf --enable-debug=no ' + autogenargs #--disable-schemas-compile ? -module_autogenargs['harfbuzz'] = '--disable-gtk-doc --disable-gtk-doc-html --disable-gtk-doc-pdf --with-coretext --without-icu ' + autogenargs -module_autogenargs['root-harfbuzz'] = '--disable-gtk-doc --disable-gtk-doc-html --disable-gtk-doc-pdf --with-coretext --without-icu ' + autogenargs -module_autogenargs['fontconfig'] = '--with-cache-dir="~/Library/Caches/org.gnome.meld.fontconfig" --with-default-fonts=/System/Library/Fonts --with-add-fonts=/Library/Fonts,/Network/Library/Fonts,/System/Library/Fonts ' + autogenargs -module_autogenargs['python3'] = '--enable-optimizations --with-system-expat --without-gcc --disable-ipv6 --with-ensurepip=yes --without-tests --disable-tests --with-threads --with-system-expat ' + autogenargs - -module_mesonargs['atk'] = '--buildtype release --optimization 3 -Ddocs=false -Dintrospection=true' -module_mesonargs['gdk-pixbuf'] = '--buildtype release --optimization 3 -Dbuiltin_loaders=all -Drelocatable=true -Ddocs=false' -module_mesonargs['glib'] = '--buildtype release --optimization 3 -Dbsymbolic_functions=false -Dgtk_doc=false -Db_bitcode=true -Db_ndebug=true' -module_mesonargs['pango'] = '--buildtype release --optimization 3 -Dintrospection=enabled' -module_mesonargs['pygobject3'] = '--buildtype release --optimization 3 -Dtests=false -Dpycairo=enabled' -module_mesonargs['gtk+-3.0'] = '--buildtype release --optimization 3 -Dx11_backend=false -Dwayland_backend=false -Dbroadway_backend=false -Dwin32_backend=false -Dquartz_backend=true -Dxinerama=no -Dcloudproviders=false -Dprofiler=false -Dtracker3=false -Dcolord=no -Dgtk_doc=false -Dman=false -Dintrospection=true -Ddemos=false -Dexamples=false -Dtests=false -Dinstalled_tests=false -Dbuiltin_immodules=yes' - -# module_autogenargs['gtk-quartz-engine'] = 'CFLAGS=-Wuninitialized ' + autogenargs -# module_autogenargs['gtksourceview3'] = '' + autogenargs -#module_autogenargs['gtk-mac-integration']='--enable-python=all --without-gtk2 --with-gtk3 --enable-introspection=yes ' + autogenargs - - - -#os.environ['CFLAGS'] += ' -I' + '/usr/include/' -#os.environ['CPPFLAGS'] += ' -I' + '/usr/include/' -#os.environ['LDFLAGS'] += ' -L' + '/usr/lib/' -#os.environ['LDFLAGS'] += ' -Wl,--rpath -Wl,' + '/usr/lib/' -#os.environ['LDFLAGS'] += ' -Wl,--rpath -Wl,' + '../lib/' -#os.environ['LDFLAGS'] += ' -Wl,--rpath -Wl,' + '../lib_pypy/' # Can be usefull when tweaking modulesets to avoid jhbuild overwriting: # nonetwork=True # nobuild=True # Download only # quiet_mode=True # Don't respect suggests -ignore_suggests = True \ No newline at end of file +#ignore_suggests = True +exit_on_error = True # For CI +interact = False # For CI +shallow_clone = True \ No newline at end of file diff --git a/osx/settings.ini b/osx/settings.ini index bd14fc2b8..1cf8b24b0 100644 --- a/osx/settings.ini +++ b/osx/settings.ini @@ -1,5 +1,5 @@ [Settings] -gtk-icon-theme-name=MeldIcons +gtk-icon-theme-name=Meld-WhiteSur-Icons #gtk-font-name=System Font Regular10 #gtk-cursor-theme-name=Breeze_Amber #gtk-cursor-theme-size=0 diff --git a/setup.cfg b/setup.cfg index b403a4ab6..23aa2ce9d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,14 +1,6 @@ [py2app] app = ['bin/meld'] -#arch = i386 -iconfile = osx/meld.icns -site-packages = false -packages = gi -includes = glib, gio, cairo, pango, pangocairo, atk, gobject, gtk.keysyms -excludes = gtk-2.0 -frameworks = CoreFoundation, Foundation, Python -argv_emulation = True -#resources = share/themes/Mac +arch = x86_64 [flake8] @@ -43,4 +35,4 @@ order_by_type = True use_parentheses = True indent = 4 include_trailing_comma = True -skip = bin/meld, setup_win32.py, README.md +skip = bin/meld, setup_win32.py, setup_py2app.py, README.md diff --git a/setup_py2app.py b/setup_py2app.py index b029914c0..731f7116f 100644 --- a/setup_py2app.py +++ b/setup_py2app.py @@ -7,6 +7,7 @@ import site import meld.build_helpers import meld.conf +import Foundation from setuptools import setup if sys.version_info[:2] < meld.conf.PYTHON_REQUIREMENT_TUPLE: @@ -38,7 +39,7 @@ 'CFBundleVersion': VERSION_STRING, 'LSPrefersPPC': False, 'LSArchitecturePriority': 'x86_64', - 'NSHumanReadableCopyright': u'Copyright © 2020', + 'NSHumanReadableCopyright': u'Copyright © 2023', 'CFBundleDisplayName': 'Meld', 'CFBundleName': 'Meld', 'NSHighResolutionCapable': True, @@ -112,30 +113,13 @@ app=['bin/meld'], setup_requires=["py2app"], options={'py2app': { - 'includes': [ 'cairo', 'gi', 'weakref', 'encodings' ], - 'excludes': [ 'ctypes' ], + 'includes': [ 'gi', 'weakref', 'encodings', 'pycairo', 'PyGObject', + 'pyobjc-core', 'pyobjc-framework-Cocoa', + 'CoreFoundation', 'Foundation' ], + 'excludes': [ 'tkinter' ], 'dylib_excludes': [ 'Python' ], - 'frameworks': - [ 'libpython3.6m.dylib', - 'libatk-1.0.0.dylib', - 'libcairo-gobject.2.dylib', - 'libcairo-script-interpreter.2.dylib', - 'libcairo.2.dylib', - 'libgio-2.0.0.dylib', - 'libgirepository-1.0.1.dylib', - 'libglib-2.0.0.dylib', - 'libgmodule-2.0.0.dylib', - 'libgobject-2.0.0.dylib', - 'libgtk-3.0.dylib', - 'libgtkmacintegration-gtk3.2.dylib', - 'libgtksourceview-4.dylib', - 'libgtksourceview-4.0.dylib', - 'libharfbuzz.0.dylib', - 'libpango-1.0.0.dylib', - 'libpangocairo-1.0.0.dylib', - 'libpangoft2-1.0.0.dylib', - 'librsvg-2.2.dylib' ], - 'argv_emulation': True, + 'frameworks': [ ], + 'argv_emulation': False, 'no_chdir': True, 'iconfile': 'osx/meld.icns', 'plist': PLIST,