diff options
Diffstat (limited to 'distribution/flatpak')
| -rw-r--r-- | distribution/flatpak/CMakeLists.txt | 24 | ||||
| -rw-r--r-- | distribution/flatpak/README.txt | 101 | ||||
| -rwxr-xr-x | distribution/flatpak/buildFlatpak.sh | 547 | ||||
| -rwxr-xr-x | distribution/flatpak/make-source-archive | 23 | ||||
| -rw-r--r-- | distribution/flatpak/org.xtrkcad.xtrkcad.yml | 55 | 
5 files changed, 750 insertions, 0 deletions
diff --git a/distribution/flatpak/CMakeLists.txt b/distribution/flatpak/CMakeLists.txt new file mode 100644 index 0000000..a9afa1f --- /dev/null +++ b/distribution/flatpak/CMakeLists.txt @@ -0,0 +1,24 @@ +set(FLATPAK_BUILD_SCRIPT "${CMAKE_SOURCE_DIR}/distribution/flatpak/buildFlatpak.sh") +set(FLATPAK_FILE ${CMAKE_BINARY_DIR}/xtrkcad-${XTRKCAD_VERSION}.flatpak) + +add_custom_command( +    OUTPUT ${FLATPAK_FILE} +    COMMAND ${FLATPAK_BUILD_SCRIPT} ${CMAKE_BINARY_DIR} +    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +    COMMENT "Re-compiling xtrkcad within flatpak Sdk; this could take a while ..." +    DEPENDS ${FLATPAK_BUILD_SCRIPT} +) + +# makes for an easy target: "make flatpak" or "ninja flatpak" +add_custom_command( +    OUTPUT flatpak +    COMMAND ${FLATPAK_BUILD_SCRIPT} ${CMAKE_BINARY_DIR} +    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +    COMMENT "Re-compiling xtrkcad within flatpak Sdk; this could take a while ..." +    DEPENDS ${FLATPAK_BUILD_SCRIPT} +) + +add_custom_target(flatpak +    DEPENDS ${FLATPAK_FILE} +    COMMENT "Generating xtrkcad-${XTRKCAD_VERSION}.flatpak" +) diff --git a/distribution/flatpak/README.txt b/distribution/flatpak/README.txt new file mode 100644 index 0000000..8da53f4 --- /dev/null +++ b/distribution/flatpak/README.txt @@ -0,0 +1,101 @@ +This is a work-in-progress to build a flatpak package + +BLDDIR is your build directory, +SRCDIR is your source directory + + +Resolved issues so far: + +- FreeImage and Inkscape not available as a flatpak +  FreeImage is mainly used on Win32, but also in pngtoxpm +  We disable building pngtoxpm in $SRCDIR/CMakeLists.txt + +- gtk2 is included as a shared module +  See org.xtrkcad.xtrkcad.yml + +- MiniXML is included as a module +  /app is used instead of /usr: FindMiniXML.cmake + +- InkScape/pngtoxpm is used to convert .svg to .xpm3 +  Not easy to include into flatpak, so we copy the .xpm3 from the regular build +  See make-soure-archive which creates a tar ball from xtrkcad source tree  +  appended with BLDDIR/app/bin/bitmaps +  see make-source-archive and app/bin/bitmaps/CMakeLists.txt + +- Removed the runtime dependencies on .xpm files + +-libzip is included as a module + +- fix wlibPixbufFromXBM to directly generate Pixmap instead of .xpm intermediate  + +# Unresolved issues + +- org.xtrkcad.xtrkcad.yml needs cleanup actions +- window background too dark +- need to build a distribution package + +$ flatpak-builder  --run workD org.xtrkcad.xtrkcad.yml xtrkcad +  see below + + +# DIRECTIONS: + + +# SEtUP: do once + +# install flatpak +$ sudo apt install flatpak + +# set up build environment +$ cd $BLDDIR/distribution +$ mkdir flatpak +$ cd flatpak + +#install gnome sdk, runtime +# choose user, 47 +$ flatpak install org.gnome.Platform +$ flatpak install org.gnome.Sdk + +# initialize git (needed for building gtk2 +$ git init +$ git submodule add https://github.com/flathub/shared-modules.git + +# build init  +$ flatpak build-init workD org.xtrkcad.xtrkcad org.gnome.Sdk/x86_64/47 org.gnome.Platform/x86_64/47 + +# create symlink from source to build for org.xtrkcad.xtrkcad.yml +# builder looks for shared-modules in org.xtrkcad.xtrkcad.yml's directory instead of pwd +$ ln -sf $SRCDIR/distribution/flatpak/org.xtrkcad.yml + + +# BUILD + +# build source tarball - you need to do this every time you change the source +$ cd SRCDIR/distribution/flatpak +$ ./make-source-archive $BLDDIR +$ edit $SRCDIR/org.xtrkcad.xtrkcad.yml: replace checksum with updated value +# return to build dir +$ cd $BLDDIR/distribution/flatpak +# build +$ flatpak-builder --force-clean workD org.xtrkcad.xtrkcad.yml + + +# RUN + +# make a symlink so we can find xtrkcad/libdir +# should add /app to search path +$ flatpak-builder --socket=fallback-x11 --run workD org.xtrkcad.xtrkcad.yml ln -s /apt/share ../share +# ta-da +$ flatpak-builder --socket=fallback-x11 --run workD org.xtrkcad.xtrkcad.yml xtrkcad +# xtrkcad runs ok (minimal testing) + +# MISC: + +# Bonus points - run bash (or any other command) in flatpak sandbox +$ flatpak-builder --socket=fallback-x11 --run workD org.xtrkcad.xtrkcad.yml bash + + +I don't know why you might need this but ... +# add repo +flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo + diff --git a/distribution/flatpak/buildFlatpak.sh b/distribution/flatpak/buildFlatpak.sh new file mode 100755 index 0000000..9555c6b --- /dev/null +++ b/distribution/flatpak/buildFlatpak.sh @@ -0,0 +1,547 @@ +#!/usr/bin/env bash + +ME=$(basename $0) + +# WARNING: changing this to yes will leave files/directories present in the source +#          tree which are not currently part of the .hgignore file +DEBUG=no + +##################################################################### +#   U S A G E +##################################################################### +usage() { +  cat <<EOF +Usage: $ME [ destination-directory ] + +This script creates a flatpak from this source. The flatpak will end +up in the root directory of this source tree or in the optional directory +passed. + +The current directory should either be the root directory of the source +or the source distribution/flatpak directory. + +Pre-requisities: +    flatpak +    flatpak-builder +    xdg-desktop-portal-gtk (log out or reboot after install) + +Known issues: +  - still uses gtk2 +EOF +  exit 1 +} +if [ "$1" = "-h" ]; then +  usage +fi + +##################################################################### +#   D E T E R M I N E   V E R S I O N +##################################################################### +PROGRAM_VERSION=ProgramVersion.cmake +if [ ! -f $PROGRAM_VERSION ]; then +  cd ../.. +fi +if [ ! -f $PROGRAM_VERSION ]; then +  echo +  echo "ERROR: not in the correct directory" +  echo +  usage +  exit 1 +fi +MOD_PROGRAM_VERSION=Modified${PROGRAM_VERSION} +cat <<EOF >$MOD_PROGRAM_VERSION +include($PROGRAM_VERSION) +if (XTRKCAD_SHOW_VERSION) +    # used by distribution/flatpak/buildFlatpak.sh +    message(\${XTRKCAD_VERSION}) +endif() +EOF +XTRKCAD_VERSION=$(cmake -DXTRKCAD_SHOW_VERSION=1 -P $MOD_PROGRAM_VERSION 2>&1) +rm -f $MOD_PROGRAM_VERSION +if [ -z "$XTRKCAD_VERSION" ]; then +  echo "Unable to determine version; is the source correct?" +  exit 1 +fi + +##################################################################### +#   S E T   V A R I A B L E S +##################################################################### +WORKING_FILE=xtrkcad-source.tar.gz +FP_BUILD_DIR=workDir +FP_STATE_DIR=${FP_STATE_DIR:-$HOME/.flatpak-builder-xtrkcad} +FP_REPO=dummy_repo +FP_DEST_DIR=${1:-$PWD} +if [ ! -d "$FP_DEST_DIR" ]; then +  echo "\"$FP_DEST_DIR\" is not a directory" +  exit 1 +fi +BETA_SUFFIX="" +LOCAL_SUBDIR="" +if [[ $XTRKCAD_VERSION = *[bB]eta[0-9]* ]]; then +  BETA_SUFFIX="-beta" +  #LOCAL_SUBDIR="local/" +fi +if [ $DEBUG != "no" ]; then +  XTRKCAD_VERSION=${XTRKCAD_VERSION}-debug +fi +XTRKCADPREFIX=/app +XTRKCADSHARE=share/xtrkcad${BETA_SUFFIX} +XTRKCADLIB=${XTRKCADPREFIX}/${LOCAL_SUBDIR}${XTRKCADSHARE} +XTRKCADBIN=${XTRKCADPREFIX}/${LOCAL_SUBDIR}bin/xtrkcad${BETA_SUFFIX} +FP_XTRKCAD_ORG=org.xtrkcad.xtrkcad${BETA_SUFFIX} +FP_MANIFEST=${FP_XTRKCAD_ORG}.yaml +FP_DESKTOP=${FP_XTRKCAD_ORG}.desktop +FP_META=${FP_XTRKCAD_ORG}.metainfo.xml +XDG_DATA=${XDG_DATA_HOME:-$HOME/.local/share} +INKSCAPE_IMAGE=Inkscape.AppImage +INKSCAPE_TAR="Inkscape.tar.gz" + +##################################################################### +#   C L E A N U P +##################################################################### +cleanup() { +  trap - 0 1 2 3 15 21 22 +  if [ "$DEBUG" = "no" ]; then +    rm -f $WORKING_FILE +    rm -rf $FP_BUILD_DIR +    find $FP_STATE_DIR -name '*build-debug' | xargs -r rm +    # removing the flatpak state dir forces fresh build +    #rm -rf $FP_STATE_DIR +    rm -rf $FP_REPO +    # manifest dynamically built, but if you want to look comment out +    rm -f $FP_MANIFEST +    rm -f $FP_DESKTOP +    rm -f $FP_META +    rm -f $INKSCAPE_IMAGE +    # removing existing inkscape tar file forces download of latest +    #rm -f $XDG_DATA/$INKSCAPE_TAR +    rm -f $MOD_PROGRAM_VERSION +  fi +} +trap cleanup 0 1 2 3 15 21 22 + +##################################################################### +#   S T A R T   F R E S H +# +#   Normally not run in order to take advantage of cached files +##################################################################### +start_fresh() { +  rm -f $WORKING_FILE +  rm -rf $FP_BUILD_DIR +  # removing the flatpak state dir forces fresh build +  rm -rf $FP_STATE_DIR +  rm -rf $FP_REPO +  # manifest dynamically built, but if you want to look comment out +  rm -f $FP_MANIFEST +  rm -f $FP_DESKTOP +  rm -f $FP_META +  rm -f $INKSCAPE_IMAGE +  # removing existing inkscape tar file forces download of latest +  rm -f $XDG_DATA/$INKSCAPE_TAR +  flatpak uninstall -y --user org.inkscape.Inkscape +} + +##################################################################### +#   F L U S H   C A C H E +# +#   Prevent cache from growing and growing during development +##################################################################### +flush_cache() { +  # in meg +  MAX_CACHE_SIZE=1000 + +  if [ ! -d "$FP_STATE_DIR" ]; then +    return +  fi +  CACHE_SIZE=$(du -sm $FP_STATE_DIR | cut -f1) +  if [[ $CACHE_SIZE -ge $MAX_CACHE_SIZE ]]; then +    echo "Removing build cache .." +    echo "CACHE_SIZE=$CACHE_SIZE, MAX_CACHE_SIZE=$MAX_CACHE_SIZE" +    rm -rf $FP_STATE_DIR +    sleep 2 +  fi +} + +##################################################################### +#   M A K E   S O U R C E   T A R B A L L +##################################################################### +make_source_tar() { +  tar -czf ../$WORKING_FILE --exclude=.hg . +  mv ../$WORKING_FILE . +} + +##################################################################### +#   G E T   A N D   E X T R A C T   I N K S C A P E +##################################################################### +get_extract_inkscape() { +  flatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepo +  flatpak install -y --user flathub org.inkscape.Inkscape +  if [ ! -f $XDG_DATA/$INKSCAPE_TAR ]; then +    echo "creating tarball of inkscape ..." +    flatpak run --user --command=tar org.inkscape.Inkscape -czf $XDG_DATA/$INKSCAPE_TAR --exclude='*/__pycache__*' /app 2>/dev/null +  fi +} + +##################################################################### +#   B U I L D   M A N I F E S T +##################################################################### +build_manifest() { +  cat <<EOF >$FP_DESKTOP +[Desktop Entry] +Name=XTrackCAD${BETA_SUFFIX} (flatpak) +Comment=Design model railroad layouts +Exec=run-xtrkcad.sh +Icon=${FP_XTRKCAD_ORG} +Terminal=false +Type=Application +Categories=Graphics +EOF +  DT="$(date '+%Y-%m-%d')" +  cat <<EOF >$FP_META +<?xml version="1.0" encoding="UTF-8"?> +<component type="desktop-application"> +  <id>${FP_XTRKCAD_ORG}</id> +  <name>XTrackCAD${BETA_SUFFIX} (flatpak)</name> +  <summary>Design model railroad layouts</summary> +  <description> +    <p>XTrackCAD is a CAD (computer-aided design) program for designing model railroad layouts.</p> +  </description> +  <releases> +    <release version="${XTRKCAD_VERSION}" date="${DT}"/> +  </releases> +  <metadata_license>CC0-1.0</metadata_license> +  <project_license>GPL-3.0</project_license> +</component> +EOF +  cat <<EOF >$FP_MANIFEST +id: $FP_XTRKCAD_ORG +runtime: org.gnome.Platform +runtime-version: '48' +sdk: org.gnome.Sdk +command: /app/bin/run-xtrkcad.sh +modules: +  - name: libzip +    buildsystem: cmake +    config-opts: +      - -DBUILD_DOC=OFF +      - -DBUILD_EXAMPLES=OFF +      - -DBUILD_REGRESS=OFF +      - -DBUILD_TOOLS=OFF +      - -DBUILD_OSSFUZZ=OFF +      - -DCMAKE_INSTALL_PREFIX=/app/libzip +      - -DBUILD_SHARED_LIBS=OFF +      - -DENABLE_COMMONCRYPTO=OFF +      - -DENABLE_GNUTLS=OFF +      - -DENABLE_MBEDTLS=OFF +      - -DENABLE_OPENSSL=OFF +      - -DENABLE_WINDOWS_CRYPTO=OFF +      - -DENABLE_BZIP2=OFF +      - -DENABLE_LZMA=OFF +      - -DENABLE_ZSTD=OFF +    sources: +      - type: archive +        url: https://github.com/nih-at/libzip/releases/download/v1.8.0/libzip-1.8.0.tar.gz +        sha256: 30ee55868c0a698d3c600492f2bea4eb62c53849bcf696d21af5eb65f3f3839e +    post-install: +      - mkdir -p /app/include +      - mkdir -p /app/lib +      - ln -s /app/libzip/include/* /app/include +      - ln -s /app/libzip/lib/libzip.a /app/lib +  - name: mxml +    buildsystem: simple +    build-commands: +      - ./configure --exec_prefix=/app/mxml --prefix=/app/mxml +      - make +      - make install +      - mkdir -p /app/include +      - mkdir -p /app/lib +      - ln -s /app/mxml/include/* /app/include +      - ln -s /app/mxml/lib/* /app/lib +    sources: +      - type: archive +# v4 changes names from mxml to mxml4 whch we haven't migrated yet +        url: https://github.com/michaelrsweet/mxml/archive/refs/tags/v3.3.1.tar.gz +        sha256: 59eba16ce43765f2e2a6cf4873a58d317be801f1e929647d85da9f171e41e9ac +  - name: gtk2 +    buildsystem: autotools +    build-options: +      env: +        CFLAGS: "-Wno-incompatible-pointer-types -Wno-implicit-int" +        CXXFLAGS: "-Wno-incompatible-pointer-types -Wno-implicit-int" +    sources: +      - type: archive +        url: "https://gitlab.gnome.org/GNOME/gtk/-/archive/2.24.33/gtk-2.24.33.tar.gz" +        sha256: dedfaf04952434c5e3e1ce4de373ac7474d12da2d99b0afc947ef1983df64601 +    config-opts: +      - "--prefix=${XTRKCADPREFIX}" +      - "--disable-introspection" +      - "--enable-shared" +      - "--disable-static" +      - "--enable-gtk-doc-html=no" +#    make-args: +#      - "V=1" +#      - "-j 1" +  - name: inkscape +    buildsystem: simple +    sources: +      - type: file +        path: $XDG_DATA/$INKSCAPE_TAR +        dest-filename: $INKSCAPE_TAR +    build-options: +      env: +        PKG_CONFIG_PATH: "/app/lib/pkgconfig:/usr/lib/pkgconfig" +        LD_LIBRARY_PATH: "/app/lib:/usr/lib:/usr/lib/x86_64-linux-gnu" +    build-commands: +      - tar -xzf $INKSCAPE_TAR --skip-old-files +      - mkdir -p /app/inkscape +      - cp -pr --update app/* /app/inkscape 2>&1 +#  - name: debug +#    buildsystem: simple +#    no-make-install: true +#    build-commands: +#      - echo "D E B U G   B E G I N" +#      - find /app -type f -o -type l +#      - echo "D E B U G   E N D" +  - name: xtrkcad +    buildsystem: simple +    sources: +      - type: inline +        dest-filename: run-xtrkcad.sh +        contents: | +          #!/bin/sh +          export XTRKCADLIB=${XTRKCADLIB} +          export XTRKCADBETALIB=${XTRKCADLIB} +          # if no access due to sandboxing, copy +          #mkdir -p ~/.local/${XTRKCADSHARE} +          #rm -rf ~/.local/${XTRKCADSHARE}/* +          #cp -pr ${XTRKCADLIB}/* ~/.local/${XTRKCADSHARE} +          #export XTRKCADLIB=~/.local/${XTRKCADSHARE} +          #export XTRKCADBETALIB=~/.local/${XTRKCADSHARE} +          # there is no access to host gtk3 modules +          unset GTK3_MODULES +          unset GTK_MODULES +          BOOKMARK="file://\$XTRKCADLIB xtrkcad-lib${BETA_SUFFIX}" +          FILE="\$HOME/.gtk-bookmarks" +          touch \$FILE +          if ! grep -Fx "\$BOOKMARK" "\$FILE" >/dev/null; then +            echo "\$BOOKMARK" >> "\$FILE" +          fi +          exec ${XTRKCADBIN} "\$@" +      - type: inline +        dest-filename: run-xtrkcad-debug.sh +        contents: | +          #!/bin/sh +          export XTRKCADLIB=${XTRKCADLIB} +          export XTRKCADBETALIB=${XTRKCADLIB} +          # if no access due to sandboxing, copy +          #mkdir -p ~/.local/${XTRKCADSHARE} +          #rm -rf ~/.local/${XTRKCADSHARE}/* +          #cp -pr ${XTRKCADLIB}/* ~/.local/${XTRKCADSHARE} +          #export XTRKCADLIB=~/.local/${XTRKCADSHARE} +          #export XTRKCADBETALIB=~/.local/${XTRKCADSHARE} +          # there is no access to host gtk3 modules +          unset GTK3_MODULES +          unset GTK_MODULES +          BOOKMARK="file://\$XTRKCADLIB xtrkcad-lib${BETA_SUFFIX}" +          FILE="\$HOME/.gtk-bookmarks" +          touch \$FILE +          if ! grep -Fx "\$BOOKMARK" "\$FILE" >/dev/null; then +            echo "\$BOOKMARK" >> "\$FILE" +          fi +          # set up for logging by day the app started +          DOW=\$(date '+%a') +          LOGFILE="\$HOME/.xtrkcad${BETA_SUFFIX}/xtrkcad_\${DOW}.log" +          LOG_ALLMODULES=" \\ +              -d Bezier=1 \\ +              -d block=1 \\ +              -d carDlgList=1 \\ +              -d carDlgState=1 \\ +              -d carInvList=1 \\ +              -d carList=1 \\ +              -d command=1 \\ +              -d control=1 \\ +              -d Cornu=1 \\ +              -d cornuturnoutdesigner=1 \\ +              -d curve=1 \\ +              -d curveSegs=1 \\ +              -d dumpElev=1 \\ +              -d ease=1 \\ +              -d endPt=1 \\ +              -d group=1 \\ +              -d init=1 \\ +              -d join=1 \\ +              -d locale=1 \\ +              -d malloc=0 \\ +              -d mapsize=1 \\ +              -d modify=1 \\ +              -d mouse=0 \\ +              -d pan=1 \\ +              -d paraminput=1 \\ +              -d paramlayout=1 \\ +              -d params=1 \\ +              -d paramupdate=1 \\ +              -d playbackcursor=1 \\ +              -d print=1 \\ +              -d profile=1 \\ +              -d readTracks=1 \\ +              -d redraw=1 \\ +              -d regression=1 \\ +              -d scale=1 \\ +              -d sensor=1 \\ +              -d shortPath=1 \\ +              -d signal=1 \\ +              -d splitturnout=1 \\ +              -d Structure=1 \\ +              -d suppresscheckpaths=1 \\ +              -d switchmotor=1 \\ +              -d timedrawgrid=1 \\ +              -d timedrawtracks=1 \\ +              -d timemainredraw=1 \\ +              -d timereadfile=1 \\ +              -d track=1 \\ +              -d trainMove=1 \\ +              -d trainPlayback=1 \\ +              -d traverseBezier=1 \\ +              -d traverseBezierSegs=1 \\ +              -d traverseCornu=1 \\ +              -d traverseJoint=1 \\ +              -d traverseTurnout=1 \\ +              -d turnout=1 \\ +              -d undo=1 \\ +              -d zoom=1 \\ +          " +          rm -f \$LOGFILE +          touch \$LOGFILE +          exec ${XTRKCADBIN} -v -l \$LOGFILE \$LOG_ALLMODULES "\$@" +      - type: file +        path: ./$FP_DESKTOP +        dest-filename: $FP_DESKTOP +      - type: file +        path: ./$FP_META +        dest-filename: $FP_META +      - type: file +        path: ./$WORKING_FILE +        dest-filename: $WORKING_FILE +    build-options: +      env: +        PKG_CONFIG_PATH: "/app/lib/pkgconfig:/app/libzip/lib/pkgconfig:/app/libzip/lib64/pkgconfig:/app/mxml/lib/pkgconfig:/app/inkscape/lib/pkgconfig:/usr/lib/pkgconfig" +        LD_LIBRARY_PATH: "/app/lib:/app/inkscape/lib:/app/libzip/lib:/app/libzip/lib64:/app/mxml/lib:/usr/lib:/usr/lib/x86_64-linux-gnu" +        PATH: "/app/bin:/app/inkscape/bin:/usr/bin" +    build-commands:  +      - | +        install -Dm755 run-xtrkcad-debug.sh /app/bin/run-xtrkcad-debug.sh +        install -Dm755 run-xtrkcad.sh /app/bin/run-xtrkcad.sh +        install -Dm644 $FP_DESKTOP /app/share/applications/${FP_DESKTOP} +        install -Dm644 $FP_META /app/share/metainfo/${FP_META} +        mkdir src +        mkdir build +        cd src +        tar xzf ../$WORKING_FILE +        cd ../build +        XTRKCAD_CMAKE_DEBUG="-DCMAKE_TARGET_PROPERTIES=1 -DCMAKE_FIND_DEBUG_MODE=1" +        XTRKCAD_CMAKE_DEBUG="" +        cmake -G Ninja \$XTRKCAD_CMAKE_DEBUG -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$XTRKCADPREFIX -DCMAKE_C_FLAGS="-I/app/include -Wpointer-sign" ../src +        mkdir -p /app/share/icons/hicolor/64x64/apps/ +        if false; then +          # debug: flatpak ps +          #        flatpak enter <instance-id> bash +          echo -e "\\nSLEEPING for debug purposes" +          echo -e "\\nin another window, run\\n  flatpak ps\\n  flatpak enter <instance-id> bash\\n" +          echo "export PKG_CONFIG_PATH=\"/app/lib/pkgconfig:/app/libzip/lib/pkgconfig:/app/libzip/lib64/pkgconfig:/app/mxml/lib/pkgconfig:/app/inkscape/lib/pkgconfig:/usr/lib/pkgconfig\"" +          echo "export LD_LIBRARY_PATH=\"/app/lib:/app/inkscape/lib:/app/libzip/lib:/app/libzip/lib64:/app/mxml/lib:/usr/lib:/usr/lib/x86_64-linux-gnu\"" +          echo "export PATH=\"/app/bin:/app/inkscape/bin:/usr/bin:\\\$PATH\"" +          echo "cd /run/build/xtrkcad/build  # to check build environment or build with ninja" +          echo "cd /run/build/xtrkcad/src    # the source" +          echo "# sorry no editor in the Sdk" +          sleep 3600 +        else +          ninja -v +          ninja -v install +          cp $XTRKCADPREFIX/${XTRKCADSHARE}/pixmaps/xtrkcad.png /app/share/icons/hicolor/64x64/apps/${FP_XTRKCAD_ORG}.png +          #cp /run/build/xtrkcad/src/app/lib/xtrkcad.png /app/share/icons/hicolor/64x64/apps/${FP_XTRKCAD_ORG}.png +          cd .. +          # what is not needed in final flatpak +          rm -rf /app/inkscape +          rm -rf /app/include +          rm -rf /app/share/man +          rm -rf /app/lib64/cmake +          rm -rf /app/share/doc +          rm -rf /app/share/gtk-2.0/demo +          rm -f /app/lib/libmxml* +          rm -f /app/lib/pkgconfig +          rm -rf /app/mxml +          rm -rf /app/libzip +          rm -f /app/lib/libzip.a +          rm -f /app/bin/gtk* +          rm -rf /app/share/aclocal +        fi +finish-args: +  - --socket=x11 +  - --socket=wayland +  - --socket=session-bus +  - --socket=cups +  - --socket=pulseaudio +  - --share=ipc +  - --device=all +  - --filesystem=~/.xtrkcad${BETA_SUFFIX}:create +  - --filesystem=~/.themes +  - --filesystem=~/.icons +  - --filesystem=~/.config:create +  - --filesystem=~/.gtk-bookmarks +  - --filesystem=~/.local/share:create +  # if home directory access not allowed, define some common ones for plans +  #- --filesystem=~/.local/${XTRKCADSHARE}:create +  #- --filesystem=~/Documents:create +  #- --filesystem=~/xtrkcad:create +  #- --filesystem=~/XtrackCAD:create +  - --filesystem=~/Downloads +  - --filesystem=xdg-data/applications +  - --filesystem=xdg-data/icons +  # home directory access +  - --filesystem=home +  # full system access +  #- --filesystem=host +  - --talk-name=org.gnome.portal.* +  - --talk-name=org.gnome.* +  - --talk-name=org.gnome.portal.* +  - --system-talk-name=org.gnome.* +EOF +} + +##################################################################### +#   B U I L D   F L A T P A K +##################################################################### +build_flatpak() { +  flatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepo +  flatpak-builder --state-dir=$FP_STATE_DIR --force-clean --user --install --repo=$FP_REPO --install-deps-from=flathub $FP_BUILD_DIR $FP_MANIFEST +  ARCH=$(uname -m) +  FP_NAME=xtrkcad-${XTRKCAD_VERSION}.${ARCH}.flatpak +  rm -f $FP_NAME +  flatpak build-bundle ${FP_REPO} $FP_NAME $FP_XTRKCAD_ORG +  if [ -f $FP_NAME ]; then +    mv $FP_NAME $FP_DEST_DIR/$FP_NAME 2>/dev/null +    echo "========================================================================" +    echo "$(ls $FP_DEST_DIR/$FP_NAME) created" +    echo +    flatpak info $FP_XTRKCAD_ORG +    echo "========================================================================" +  else +    echo "========================================================================" +    echo "problem creating $FP_NAME " +    echo "========================================================================" +  fi +} + +##################################################################### +#   M A I N +##################################################################### +#start_fresh +echo "========================================================================" +echo "Making xtrkcad-${XTRKCAD_VERSION}.flatpak" +echo "========================================================================" +sleep 3 +flush_cache +make_source_tar +get_extract_inkscape +build_manifest +build_flatpak diff --git a/distribution/flatpak/make-source-archive b/distribution/flatpak/make-source-archive new file mode 100755 index 0000000..5e48823 --- /dev/null +++ b/distribution/flatpak/make-source-archive @@ -0,0 +1,23 @@ +#!/bin/bash +if [ $# -ne 1 ] ; then +	echo "$0 <BLDDIR>/distribution/flatpak" +	echo "Create source tar ball, with .xpm3 files" +	echo "Run from <SRCDIR>/distribution/flatpak" +	echo "Computes sha256 checksum which must updated in org.xtrkcad.xtrkcad.yml" +	exit 0 +fi + +SRCDIR=`pwd` +BLDDIR=$1 + +cd ../.. +tar cf ${BLDDIR}/source.tar . +cd $BLDDIR/../../app/bin +tar rf ${BLDDIR}/source.tar ./bitmaps + +cd $BLDDIR +rm -f source.tar.gz +# -n zeros the timestamp so repeated runs yield the same checksum +gzip -n source.tar +echo "Update org.xtrkcad.xtrkcad.yml with this checksum" +sha256sum source.tar.gz diff --git a/distribution/flatpak/org.xtrkcad.xtrkcad.yml b/distribution/flatpak/org.xtrkcad.xtrkcad.yml new file mode 100644 index 0000000..d477d55 --- /dev/null +++ b/distribution/flatpak/org.xtrkcad.xtrkcad.yml @@ -0,0 +1,55 @@ +app-id: org.xtrkcad.xtrkcad +runtime: org.gnome.Platform +runtime-version: '47' +sdk: org.gnome.Sdk +command: xtrkcad +env: +  - XTRKCADLIB=/app/share/xtrkcad +modules: +  - shared-modules/gtk2/gtk2.json + +  - shared-modules/libcanberra/libcanberra.json + +  - name: mxml +    buildsystem: simple +    build-commands: +      - ./configure --exec_prefix=/app --prefix=/app +      - make +      - make install +    sources: +      - type: archive +# v4 changes names from mxml to mxml4 whch we haven't migrated yet +        url: https://github.com/michaelrsweet/mxml/archive/refs/tags/v3.3.1.tar.gz +        sha256: 59eba16ce43765f2e2a6cf4873a58d317be801f1e929647d85da9f171e41e9ac + +# from https://github.com/tinywrkb/flatpaks/commit/3e0a63a0f78deaec9f06cf61db0659d7773f0a49 +  - name: libzip +    buildsystem: cmake +    config-opts: +      - -DBUILD_DOC=OFF +      - -DBUILD_EXAMPLES=OFF +      - -DBUILD_REGRESS=OFF +      - -DBUILD_TOOLS=OFF +    sources: +      - type: archive +        url: https://github.com/nih-at/libzip/releases/download/v1.8.0/libzip-1.8.0.tar.gz +        sha256: 30ee55868c0a698d3c600492f2bea4eb62c53849bcf696d21af5eb65f3f3839e +        x-checker-data: +          type: anitya +          project-id: 10649 +          stable-only: true +          url-template: https://github.com/nih-at/libzip/releases/download/v$version/libzip-$version.tar.gz +        cleanup: +          - /lib/cmake +#      - ../shared-modules/libzip/libzip.json + +  - name: xtrkcad +    sources: +      - type: archive +        path: ./source.tar.gz +#       if source changes, run ./make-source-archive and replace this checksum +        sha256: 97a456c92ffc4d9c4ee2f62bfde74e7e93b493bbd047bf594fca1e4858fff266  +    buildsystem: cmake +    config-opts: +      - -DCMAKE_BUILD_TYPE=DEBUG +      - -DCMAKE_INSTALL_PREFIX=/app  | 
