diff options
Diffstat (limited to 'distribution')
| -rw-r--r-- | distribution/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | distribution/fedora/xtrkcad.spec | 43 | ||||
| -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 | ||||
| -rw-r--r-- | distribution/osx/bundle/xtrackcad-startup | 14 | ||||
| -rwxr-xr-x | distribution/osx/gtk-bundle/xtrkcad-launcher.sh | 30 | ||||
| -rw-r--r-- | distribution/posix/CMakeLists.txt | 14 | ||||
| -rwxr-xr-x | distribution/posix/postinst | 6 | ||||
| -rwxr-xr-x | distribution/posix/prerm | 6 |
12 files changed, 824 insertions, 42 deletions
diff --git a/distribution/CMakeLists.txt b/distribution/CMakeLists.txt index 30acac7..5715ff5 100644 --- a/distribution/CMakeLists.txt +++ b/distribution/CMakeLists.txt @@ -28,6 +28,9 @@ ENDIF(APPLE) IF(UNIX AND NOT APPLE) ADD_SUBDIRECTORY(posix) + if(Flatpak_FOUND) + ADD_SUBDIRECTORY(flatpak) + endif() ENDIF(UNIX AND NOT APPLE) IF(WIN32) diff --git a/distribution/fedora/xtrkcad.spec b/distribution/fedora/xtrkcad.spec index eae4a74..b5a0cd2 100644 --- a/distribution/fedora/xtrkcad.spec +++ b/distribution/fedora/xtrkcad.spec @@ -1,14 +1,12 @@ Name: xtrkcad Summary: CAD for Model Railroad layout -Version: 5.2.2 +Version: 5.3.0 Release: 1%{?dist} License: GPLv2 URL: https://sourceforge.net/projects/xtrkcad-fork Source0: https://sourceforge.net/projects/xtrkcad-fork/files/XTrackCad/Version%20%{version}/xtrkcad-source-%{version}GA.tar.gz -# patch (to be removed on next GA release) -# patch0 adds xtrkcad.desktop to build - Changed upstream -# It also uses cJSON and xdg-utils packages -Patch0: xtrkcad-5.2.2GA-xtrkcad.desktop.patch +# fix build to use dynamic libzip +Patch0: xtrkcad-5.3.0GA.libzip.patch BuildRequires: gcc BuildRequires: gcc-c++ @@ -22,6 +20,12 @@ BuildRequires: glibc-devel BuildRequires: pandoc BuildRequires: doxygen BuildRequires: cjson-devel +BuildRequires: mxml +BuildRequires: mxml-devel +BuildRequires: freeimage +BuildRequires: freeimage-devel +BuildRequires: inkscape +BuildRequires: inkscape-libs Requires: xdg-utils @@ -35,20 +39,18 @@ flex-track to modify, extend and join tracks and turnouts. Additional features include tunnels, 'post-it' notes, on-screen ruler, parts list, 99 drawing layers, undo/redo commands, benchwork, 'Print to BitMap', elevations, train simulation and -car inventory. +car inventory. Documents/help is in xtrkcad-doc rpm. %prep %setup -n xtrkcad-source-%{version}GA -q - -# removed on next GA release -%patch0 -p1 +%patch 0 -p1 %package doc Summary: Documentation for %{name} BuildArch: noarch %description doc -This package contains user documentation for XTrkCad, +This package contains user documentation and help for XTrkCAD, in HTML format. It also contains demos, and examples. %build @@ -90,8 +92,29 @@ mv %{buildroot}/%{_datadir}/%{name}/applications/xtrkcad.xml \ %{_datadir}/%{name}/demos %{_datadir}/%{name}/examples %{_datadir}/%{name}/html +%{_datadir}/locale/cy_GB/LC_MESSAGES/%{name}.mo +%{_datadir}/locale/de_DE/LC_MESSAGES/%{name}.mo +%{_datadir}/locale/fi/LC_MESSAGES/%{name}.mo +%{_datadir}/locale/fr_FR/LC_MESSAGES/%{name}.mo +%{_datadir}/locale/pt_BR/LC_MESSAGES/%{name}.mo +%{_datadir}/locale/ru/LC_MESSAGES/%{name}.mo %changelog +* Fri Apr 26 2024 Phil Cameron <pecameron1 -at- gmail.com> 5.3.0-1 +- V5.3.0 GA + +* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Jul 22 2023 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Sat Jan 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + * Mon Feb 21 2022 Phil Cameron <pecameron1 -at- gmail.com> 5.2.2-1 - V5.2.2 GA 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 diff --git a/distribution/osx/bundle/xtrackcad-startup b/distribution/osx/bundle/xtrackcad-startup index e82d444..33abf0c 100644 --- a/distribution/osx/bundle/xtrackcad-startup +++ b/distribution/osx/bundle/xtrackcad-startup @@ -28,13 +28,13 @@ mkdir -p "$XTRKCAD_ETC/pango" sed -e 's|/opt/local/etc|'"$XTRKCAD_ETC|g" "$XTRKCAD_RESOURCES/etc/pango/pangorc" > "$XTRKCAD_ETC/pango/pangorc" sed -e 's|/opt/local|\"'"$XTRKCAD_RESOURCES|g" -e "s/\.so/.so\"/g" "$XTRKCAD_RESOURCES/etc/pango/pango.modules" > "$XTRKCAD_ETC/pango/pango.modules" -export "DYLD_LIBRARY_PATH=$XTRKCAD_RESOURCES/lib" -export "FONTCONFIG_PATH=$XTRKCAD_RESOURCES/etc/fonts" -export "GDK_PIXBUF_MODULE_FILE=$XTRKCAD_GDK_PIXBUF_MODULE_FILE" -export "GTK_IM_MODULE_FILE=$XTRKCAD_GTK_IM_MODULE_FILE" -export "PANGO_RC_FILE=$XTRKCAD_PANGO_RC_FILE" -export "PATH=$XTRKCAD_RESOURCES/bin:$PATH" -export "XTRKCADLIB=$XTRKCAD_RESOURCES/share/xtrkcad" +export DYLD_LIBRARY_PATH="$XTRKCAD_RESOURCES/lib" +export FONTCONFIG_PATH="$XTRKCAD_RESOURCES/etc/fonts" +export GDK_PIXBUF_MODULE_FILE="$XTRKCAD_GDK_PIXBUF_MODULE_FILE" +export GTK_IM_MODULE_FILE="$XTRKCAD_GTK_IM_MODULE_FILE" +export PANGO_RC_FILE="$XTRKCAD_PANGO_RC_FILE" +export PATH="$XTRKCAD_RESOURCES/bin:$PATH" +export XTRKCADLIB="$XTRKCAD_RESOURCES/share/xtrkcad" export exec "$XTRKCAD_RESOURCES/bin/xtrkcad" diff --git a/distribution/osx/gtk-bundle/xtrkcad-launcher.sh b/distribution/osx/gtk-bundle/xtrkcad-launcher.sh index 69aac1e..9bd49af 100755 --- a/distribution/osx/gtk-bundle/xtrkcad-launcher.sh +++ b/distribution/osx/gtk-bundle/xtrkcad-launcher.sh @@ -8,12 +8,6 @@ if test "x$GTK_DEBUG_LAUNCHER" != x; then set -x fi -if test "x$GTK_DEBUG_GDB" != x; then - EXEC="gdb --args" -else - EXEC=exec -fi - name=`basename "$0"` tmp="$0" tmp=`dirname "$tmp"` @@ -186,13 +180,13 @@ echo "XTrackCAD: XTRKCAD_BUNDLE: $XTRKCAD_BUNDLE" #sed -e 's|/opt/local/etc|'"$XTRKCAD_ETC|g" "$XTRKCAD_RESOURCES/etc/pango/pangorc" > "$XTRKCAD_ETC/pango/pangorc" #sed -e 's|/opt/local|\"'"$XTRKCAD_RESOURCES|g" -e "s/\.so/.so\"/g" "$XTRKCAD_RESOURCES/etc/pango/pango.modules" > "$XTRKCAD_ETC/pango/pango.modules" -#export "DYLD_LIBRARY_PATH=$XTRKCAD_RESOURCES/lib" -#export "FONTCONFIG_PATH=$XTRKCAD_RESOURCES/etc/fonts" -#export "GDK_PIXBUF_MODULE_FILE=$XTRKCAD_GDK_PIXBUF_MODULE_FILE" -#export "GTK_IM_MODULE_FILE=$XTRKCAD_GTK_IM_MODULE_FILE" -export "PANGO_RC_FILE=$XTRKCAD_PANGO_RC_FILE" -export "PATH=$XTRKCAD_RESOURCES/bin:$PATH" -export "XTRKCADLIB=$XTRKCAD_RESOURCES/xtrkcad" +#export DYLD_LIBRARY_PATH="$XTRKCAD_RESOURCES/lib" +#export FONTCONFIG_PATH="$XTRKCAD_RESOURCES/etc/fonts" +#export GDK_PIXBUF_MODULE_FILE="$XTRKCAD_GDK_PIXBUF_MODULE_FILE" +#export GTK_IM_MODULE_FILE="$XTRKCAD_GTK_IM_MODULE_FILE" +export PANGO_RC_FILE="$XTRKCAD_PANGO_RC_FILE" +export PATH="$XTRKCAD_RESOURCES/bin:$PATH" +export XTRKCADLIB="$XTRKCAD_RESOURCES/xtrkcad" #export #exec "$XTRKCAD_BUNDLE/Contents/MacOS/XtrkCAD-bin" @@ -208,7 +202,15 @@ if /bin/expr "x$1" : '^x-psn_' > /dev/null; then shift 1 fi -$EXEC "$XTRKCAD_BUNDLE/Contents/MacOS/XtrkCAD-bin" "$@" +if test "x$GTK_DEBUG_GDB" != x; then + gdb --args "$XTRKCAD_BUNDLE/Contents/MacOS/XtrkCAD-bin" "$@" +else + if `tty -s`; then + $XTRKCAD_BUNDLE/Contents/MacOS/XtrkCAD-bin "$@" + else + nohup "$XTRKCAD_BUNDLE/Contents/MacOS/XtrkCAD-bin" "$@" >/dev/null & + fi +fi echo "XTrackCAD: Finishing $0" diff --git a/distribution/posix/CMakeLists.txt b/distribution/posix/CMakeLists.txt index f202791..d80322a 100644 --- a/distribution/posix/CMakeLists.txt +++ b/distribution/posix/CMakeLists.txt @@ -12,8 +12,8 @@ if(XTRKCAD_BETA MATCHES "-beta") set(CPACK_INSTALL_PREFIX "/usr/local" ) else() set(CPACK_INSTALL_PREFIX "/usr" ) - set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/postinst;${CMAKE_CURRENT_SOURCE_DIR}/prerm") endif() +set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/postinst;${CMAKE_CURRENT_SOURCE_DIR}/prerm") set(CPACK_PACKAGING_INSTALL_PREFIX ${CPACK_INSTALL_PREFIX}) @@ -37,12 +37,6 @@ if(NOT XTRKCAD_USE_BROWSER) # message(AUTHOR_WARNING "Add dependency to webkitgtk for viewing help!") endif() -#Add dependency to MiniXML (mxml) if configured -if(XTRKCAD_CREATE_SVG) - set(CPACK_RPM_PACKAGE_REQUIRES - "${CPACK_RPM_PACKAGE_REQUIRES} mxml") -endif() - # exclude these directories from the rpm set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/usr/local" @@ -56,6 +50,12 @@ set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/usr/share/pixmaps" ) +set(CPACK_RPM_DEFAULT_DIR_PERMISSIONS + OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE) + + set(CPACK_RPM_CHANGELOG_FILE "${CMAKE_CURRENT_SOURCE_DIR}////changelog.txt") set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) diff --git a/distribution/posix/postinst b/distribution/posix/postinst index 969aa7e..d4e22cb 100755 --- a/distribution/posix/postinst +++ b/distribution/posix/postinst @@ -1,5 +1,5 @@ #!/bin/sh -LOGF=/tmp/xtrkcad-setup.log +LOGF=${HOME}/xtrkcad-setup.log if [ -f "${LOGF}" ] ; then chmod 666 ${LOGF} echo postinst: $* >> ${LOGF} @@ -7,7 +7,9 @@ else LOGF=/dev/null fi -INSTALLDIR=/usr/share/xtrkcad +# Note: when branching for Beta, change the next line to /usr/local/share/xtrkcad-beta +# when building for GA, change the next line back to /usr/share/xtrkcad +INSTALLDIR=/usr/local/share/xtrkcad-beta ( su -c "sh ${INSTALLDIR}/xtrkcad-setup install ${INSTALLDIR}" -l $SUDO_USER ) >> ${LOGF} 2>&1 diff --git a/distribution/posix/prerm b/distribution/posix/prerm index b5ae917..71cfd00 100755 --- a/distribution/posix/prerm +++ b/distribution/posix/prerm @@ -1,5 +1,5 @@ #!/bin/sh -LOGF=/tmp/xtrkcad-setup.log +LOGF=${HOME}/xtrkcad-setup.log if [ -f "${LOGF}" ] ; then chmod 666 ${LOGF} echo prerm: $* >> ${LOGF} @@ -7,7 +7,9 @@ else LOGF=/dev/null fi -INSTALLDIR=/usr/share/xtrkcad +# Note: when branching for Beta, change the next line to /usr/local/share/xtrkcad-beta +# when building for GA, change the next line back to /usr/share/xtrkcad +INSTALLDIR=/usr/local/share/xtrkcad-beta ( su -c "sh ${INSTALLDIR}/xtrkcad-setup remove ${INSTALLDIR}" -l $SUDO_USER ) >> ${LOGF} 2>&1 |
