An open API service indexing awesome lists of open source software.

https://github.com/gpodder/gpodder-osx-bundle

generate a native gtk+ quartz OS X application
https://github.com/gpodder/gpodder-osx-bundle

Last synced: 29 days ago
JSON representation

generate a native gtk+ quartz OS X application

Awesome Lists containing this project

README

          

= OS X Bundle Build Scripts

*Don't Panic*

This is a collection of files required to build pythonbase.app:
native dependencies to run gPodder as a native GTK+ Quartz application for Mac OS X 10.9+,
with a working python interpreter and pip utility.

The scripts are executed on github.com, with xcode 13.2.1 on macos 11.6.8 (as of 27aug2022).

NOTE: In case you want just want to run gPodder from source you can ignore all
this and use the released bundle as a development environment. Download the
official bundle, git clone the gPodder repo and do
`./gPodder.app/Contents/MacOS/run-python bin/gpodder`.

Uses https://git.gnome.org/browse/jhbuild/[jhbuild] and the stable module
set provided by https://git.gnome.org/browse/gtk-osx/[gtk-osx] with a
gPodder specific module set overlay to build all needed dependencies for gPodder.
Everything will be downloaded/installed into this directory and your
user directory will not be touched.

Builds upon the great scripts by Christoph Reiter to automate my previously
tedious description.

== Creating a Bundle

Prerequisites: `OS X` 12+ and a working
https://developer.apple.com/xcode/downloads/[`Xcode`] and
https://git-scm.com/download/mac[`git`].

Verify that Xcode and git is installed and in your `$PATH` by invoking `git
--version` and `gcc --version`. The `env.sh` script resets your `$PATH` to the
default value (`{,/usr}/{,s}bin`) to make sure non-native programs, installed
by other package managers like homebrew or macports, are not used (read more
https://wiki.gnome.org/Projects/GTK+/OSX/Building#line-38[here]).

(Tested on macOS 10.15.1)

. Edit `pins.sh`, updating commit hashes.
. Call `bootstrap.sh` to install jhbuild and set up dummy `$HOME` as base.
. Call `build.sh` to download and build all the dependencies.
. Call `bundle.sh` to create the finished bundles for gPodder in
`_build`.

== Development

* After `bootstrap.sh` has finished executing `source env.sh` will put you
in the build environment. After that jhbuild can be used directly.
* `fetch_modules.sh` downloads the git master of the gtk-osx module set
and replaces the modules under "modulesets. Doing so so should ideally be followed by a
review of the gPodder module to reduce duplication and a rebuild to verify
that everything still works.

== Releasing

Releasing on OS X

. edit `pins.sh`, updating commit hashes
. run `fetch_modules.sh`
. remove `modulesets/*~`, `modulesets/gtk-osx.modules.orig` and `_gtk-osx`
. commit and push changes
. wait for github action to build the bundle
. test latest pythonbase-xxx.zip on macOS

. tags are now the year as 2 digits, month as 1 or 2 digits (no leading 0), day as 1 or 2 digits (no leading 0): `git tag -a -m "update deps" YY.MM.DD`
. `git push`
. wait for github action to build the tagged bundle

. remove `_build`
. `GITHUB_TOKEN=xxxx python github_release.py --download --github-workflow LATEST_GA_WORKFLOW --previous-tag THE_PREVIOUS_RELEASE_TAG YY.MM.DD`
where LATEST_GA_WORKFLOW is the number in URL of the latest github action for the tag, not master (eg. 1234567890)
. repeat the command without `--download` to upload to github
. edit and publish the release on github
. now you can update the tag in `.github/workflows/release-from-macos.yml` of the gPodder project.

Releasing on macOS by using the working pip:

[start=4]
git clone https://github.com/gpodder/gpodder.git
cd gpodder
./tools/mac-osx/release_on_mac.sh ~/Downloads/pythonbase-21.4.27.zips

== Issues

See https://github.com/gpodder/gpodder-osx-bundle

== Using gPodder:

See the official help guide http://gpodder.github.io/docs/

== Content Description

* `modulesets` contains the gtk-osx stable module set and a gpodder module
which adds new packages replaces existing ones.
* `misc`: see each file or directory README for a description.