summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--development/atom/README12
-rw-r--r--development/atom/atom.SlackBuild55
-rw-r--r--development/atom/atom.info6
-rw-r--r--development/atom/fix-atom.sh.patch115
-rw-r--r--development/atom/fix-ime-events-handler-electron-1.4.patch47
-rw-r--r--development/atom/use-system-electron.patch101
6 files changed, 315 insertions, 21 deletions
diff --git a/development/atom/README b/development/atom/README
index 93174ec239..801daa2b59 100644
--- a/development/atom/README
+++ b/development/atom/README
@@ -13,11 +13,21 @@ If you use apmd package you need rename apm tool.
Optional building features:
* Disable compiling metrics module for Google Analytics
- for poeple who love your privacy
+ for people who love your privacy
https://github.com/atom/metrics
DISABLE_METRICS=yes|no (default: no)
* Delete temporary data cached after building package
DELETE_CACHE=yes|no (default: no)
+* Use atom with some version of electron previously
+ installed in the system. This feature don't make
+ a distributable binary, and you can use like as node
+ script application. This requires electron
+ available in SBo
+ ELECTRON=yes|no (default=no)
+
+If you need to use any option do something like:
+
+ELECTRON=yes ./atom.SlackBuild
NOTE:
Atom may failed to build at first attempt.
diff --git a/development/atom/atom.SlackBuild b/development/atom/atom.SlackBuild
index a5641f7721..1f450cf56f 100644
--- a/development/atom/atom.SlackBuild
+++ b/development/atom/atom.SlackBuild
@@ -23,7 +23,7 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=atom
-VERSION=${VERSION:-1.14.1}
+VERSION=${VERSION:-1.14.3}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
@@ -31,6 +31,8 @@ TAG=${TAG:-_SBo}
DISABLE_METRICS=${DISABLE_METRICS:-no}
#Clean cache data after building
DELETE_CACHE=${DELETE_CACHE:-no}
+#Use pre-installed electron from SBo
+ELECTRON=${ELECTRON:-no}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
@@ -45,21 +47,17 @@ TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
- LIBDIRSUFFIX=""
- NPMARCH="ia32"
-elif [ "$ARCH" = "i686" ]; then
- SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+if [[ "$ARCH" = "i"?"86" ]]; then
LIBDIRSUFFIX=""
NPMARCH="ia32"
+ ARCH_OUTPUT="i386" # for detect output directory
elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
NPMARCH="x86_64"
+ ARCH_OUTPUT="amd64" # for detect output directory
else
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
+ echo "Your platform $ARCH is not supported."
+ exit 1
fi
set -e
@@ -77,6 +75,21 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+if [ "$ELECTRON" != "no" ]; then
+ # test if electron is installed
+ ELECTRON_VERSION=$(electron --version | tr -d 'v')
+fi
+
+if [ "${ELECTRON_VERSION}" != "" ]; then
+ # change electron version in package.json
+ sed -i -E -e 's/"electronVersion": "[0-9.]+"/"electronVersion": "'${ELECTRON_VERSION}'"/g' package.json
+ # patch for use electron pre-installed
+ patch -p1 < $CWD/use-system-electron.patch
+ patch -p1 < $CWD/fix-atom.sh.patch
+ # patch for IME events from ARCH AUR PKGBuild
+ patch -p1 < $CWD/fix-ime-events-handler-electron-1.4.patch
+fi
+
if [ "$DISABLE_METRICS" = "yes" ]; then
sed -i '/"metrics":/d' package.json
fi
@@ -93,16 +106,24 @@ PYTHON=python2 \
# Manual installation since --install-dir option is deleted
# Installation based on spec file from official RPM package from atom
install -d $PKG/usr/{bin,doc,share}
-install -d $PKG/usr/share/atom/
-# detect output directory
-ARCH_OUTPUT="i386"
-if [ "$ARCH" = "x86_64" ]; then
- ARCH_OUTPUT="amd64"
+if [ "${ELECTRON_VERSION}" != "" ]; then
+ cp -r out/app $PKG/usr/share/atom
+ # apm - manually installation to upstream recommended place
+ ATOM_RESOURCES=/usr/share/atom/resources/app
+ install -d $PKG/$ATOM_RESOURCES
+ cp -r apm $PKG/$ATOM_RESOURCES
+ # fix paths for apm
+ sed -i -e 's#'$TMP/$PRGNAM-$VERSION'#'$ATOM_RESOURCES'#g' \
+ $PKG/$ATOM_RESOURCES/apm/node_modules/atom-package-manager/package.json
+ sed -i -e 's#resources/app.asar##g' \
+ $PKG/$ATOM_RESOURCES/apm/node_modules/atom-package-manager/lib/apm.js
+else
+ # packaged installation
+ cp -r out/$PRGNAM-$VERSION-$ARCH_OUTPUT $PKG/usr/share/atom
fi
install -Dm755 atom.sh $PKG/usr/bin/atom
-cp -r out/$PRGNAM-$VERSION-$ARCH_OUTPUT/* $PKG/usr/share/atom/
(
cd $PKG/usr/bin
ln -sf ../share/atom/resources/app/apm/node_modules/.bin/apm apm
@@ -111,7 +132,7 @@ cp -r out/$PRGNAM-$VERSION-$ARCH_OUTPUT/* $PKG/usr/share/atom/
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
-# use only if you use apmd package from slackware pastures
+# use only if you use apmd package from Slackware pastures
# mv $PKG/usr/bin/apm $PKG/usr/bin/atom-apm
# move and configure icons and .desktop file
diff --git a/development/atom/atom.info b/development/atom/atom.info
index 618977a06c..c5f523d621 100644
--- a/development/atom/atom.info
+++ b/development/atom/atom.info
@@ -1,8 +1,8 @@
PRGNAM="atom"
-VERSION="1.14.1"
+VERSION="1.14.3"
HOMEPAGE="https://atom.io/"
-DOWNLOAD="https://codeload.github.com/atom/atom/tar.gz/v1.14.1"
-MD5SUM="cc3948e576cc267a78d8cbe4a35a0e5f"
+DOWNLOAD="https://codeload.github.com/atom/atom/tar.gz/v1.14.3"
+MD5SUM="5a7370a2261f3f654c128a6c628c7d13"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="nodejs"
diff --git a/development/atom/fix-atom.sh.patch b/development/atom/fix-atom.sh.patch
new file mode 100644
index 0000000000..c65ae86d90
--- /dev/null
+++ b/development/atom/fix-atom.sh.patch
@@ -0,0 +1,115 @@
+diff -Naur a/atom.sh c/atom.sh
+--- a/atom.sh 2017-02-17 10:53:06.000000000 -0600
++++ c/atom.sh 2017-02-24 23:45:17.745685040 -0600
+@@ -1,14 +1,5 @@
+ #!/bin/bash
+
+-if [ "$(uname)" == 'Darwin' ]; then
+- OS='Mac'
+-elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then
+- OS='Linux'
+-else
+- echo "Your platform ($(uname -a)) is not supported."
+- exit 1
+-fi
+-
+ if [ "$(basename $0)" == 'atom-beta' ]; then
+ BETA_VERSION=true
+ else
+@@ -54,79 +45,29 @@
+ export ELECTRON_ENABLE_LOGGING=1
+ fi
+
+-if [ $OS == 'Mac' ]; then
+- if [ -L "$0" ]; then
+- SCRIPT="$(readlink "$0")"
+- else
+- SCRIPT="$0"
+- fi
+- ATOM_APP="$(dirname "$(dirname "$(dirname "$(dirname "$SCRIPT")")")")"
+- if [ "$ATOM_APP" == . ]; then
+- unset ATOM_APP
+- else
+- ATOM_PATH="$(dirname "$ATOM_APP")"
+- ATOM_APP_NAME="$(basename "$ATOM_APP")"
+- fi
+-
+- if [ -n "$BETA_VERSION" ]; then
+- ATOM_EXECUTABLE_NAME="Atom Beta"
+- else
+- ATOM_EXECUTABLE_NAME="Atom"
+- fi
+-
+- if [ -z "${ATOM_PATH}" ]; then
+- # If ATOM_PATH isn't set, check /Applications and then ~/Applications for Atom.app
+- if [ -x "/Applications/$ATOM_APP_NAME" ]; then
+- ATOM_PATH="/Applications"
+- elif [ -x "$HOME/Applications/$ATOM_APP_NAME" ]; then
+- ATOM_PATH="$HOME/Applications"
+- else
+- # We haven't found an Atom.app, use spotlight to search for Atom
+- ATOM_PATH="$(mdfind "kMDItemCFBundleIdentifier == 'com.github.atom'" | grep -v ShipIt | head -1 | xargs -0 dirname)"
+-
+- # Exit if Atom can't be found
+- if [ ! -x "$ATOM_PATH/$ATOM_APP_NAME" ]; then
+- echo "Cannot locate ${ATOM_APP_NAME}, it is usually located in /Applications. Set the ATOM_PATH environment variable to the directory containing ${ATOM_APP_NAME}."
+- exit 1
+- fi
+- fi
+- fi
+
+- if [ $EXPECT_OUTPUT ]; then
+- "$ATOM_PATH/$ATOM_APP_NAME/Contents/MacOS/$ATOM_EXECUTABLE_NAME" --executed-from="$(pwd)" --pid=$$ "$@"
+- exit $?
+- else
+- open -a "$ATOM_PATH/$ATOM_APP_NAME" -n --args --executed-from="$(pwd)" --pid=$$ --path-environment="$PATH" "$@"
+- fi
+-elif [ $OS == 'Linux' ]; then
+- SCRIPT=$(readlink -f "$0")
+- USR_DIRECTORY=$(readlink -f $(dirname $SCRIPT)/..)
+-
+- if [ -n "$BETA_VERSION" ]; then
+- ATOM_PATH="$USR_DIRECTORY/share/atom-beta/atom"
+- else
+- ATOM_PATH="$USR_DIRECTORY/share/atom/atom"
+- fi
+-
+- ATOM_HOME="${ATOM_HOME:-$HOME/.atom}"
+- mkdir -p "$ATOM_HOME"
++if [ -n "$BETA_VERSION" ]; then
++ ATOM_PATH="electron --app=/usr/share/atom-beta/atom"
++else
++ ATOM_PATH="electron --app=/usr/share/atom"
++fi
+
+- : ${TMPDIR:=/tmp}
++ATOM_HOME="${ATOM_HOME:-$HOME/.atom}"
++mkdir -p "$ATOM_HOME"
+
+- [ -x "$ATOM_PATH" ] || ATOM_PATH="$TMPDIR/atom-build/Atom/atom"
++: ${TMPDIR:=/tmp}
+
+- if [ $EXPECT_OUTPUT ]; then
+- "$ATOM_PATH" --executed-from="$(pwd)" --pid=$$ "$@"
++if [ $EXPECT_OUTPUT ]; then
++ $ATOM_PATH --executed-from="$(pwd)" --pid=$$ "$@"
++ exit $?
++else
++ (
++ nohup $ATOM_PATH --executed-from="$(pwd)" --pid=$$ "$@" > "$ATOM_HOME/nohup.out" 2>&1
++ if [ $? -ne 0 ]; then
++ cat "$ATOM_HOME/nohup.out"
+ exit $?
+- else
+- (
+- nohup "$ATOM_PATH" --executed-from="$(pwd)" --pid=$$ "$@" > "$ATOM_HOME/nohup.out" 2>&1
+- if [ $? -ne 0 ]; then
+- cat "$ATOM_HOME/nohup.out"
+- exit $?
+- fi
+- ) &
+ fi
++ ) &
+ fi
+
+ # Exits this process when Atom is used as $EDITOR
diff --git a/development/atom/fix-ime-events-handler-electron-1.4.patch b/development/atom/fix-ime-events-handler-electron-1.4.patch
new file mode 100644
index 0000000000..db5681d4fd
--- /dev/null
+++ b/development/atom/fix-ime-events-handler-electron-1.4.patch
@@ -0,0 +1,47 @@
+--- a/src/text-editor-component.coffee
++++ b/src/text-editor-component.coffee
+@@ -110,6 +110,7 @@ class TextEditorComponent
+ @updateSync()
+ @checkForVisibilityChange()
+ @initialized = true
++ @checkpointForIME = null
+
+ destroy: ->
+ @mounted = false
+@@ -305,19 +306,20 @@ class TextEditorComponent
+ # User escape to cancel
+ # 4. compositionend fired
+ # OR User chooses a completion
+- # 4. compositionend fired
+- # 5. textInput fired; event.data == the completion string
++ # 4. textInput fired; event.data == the completion string
++ # 5. compositionend fired
+
+- checkpoint = null
+ @domNode.addEventListener 'compositionstart', =>
+ if @openedAccentedCharacterMenu
+ @editor.selectLeft()
+ @openedAccentedCharacterMenu = false
+- checkpoint = @editor.createCheckpoint()
++ @checkpointForIME = @editor.createCheckpoint()
+ @domNode.addEventListener 'compositionupdate', (event) =>
+ @editor.insertText(event.data, select: true)
+ @domNode.addEventListener 'compositionend', (event) =>
+- @editor.revertToCheckpoint(checkpoint)
++ if @checkpointForIME
++ @editor.revertToCheckpoint(@checkpointForIME)
++ @checkpointForIME = null
+ event.target.value = ''
+
+ # Listen for selection changes and store the currently selected text
+@@ -354,6 +356,10 @@ class TextEditorComponent
+ onTextInput: (event) =>
+ event.stopPropagation()
+
++ if @checkpointForIME
++ @editor.revertToCheckpoint(@checkpointForIME)
++ @checkpointForIME = null
++
+ # WARNING: If we call preventDefault on the input of a space character,
+ # then the browser interprets the spacebar keypress as a page-down command,
+ # causing spaces to scroll elements containing editors. This is impossible
diff --git a/development/atom/use-system-electron.patch b/development/atom/use-system-electron.patch
new file mode 100644
index 0000000000..cc97e04a65
--- /dev/null
+++ b/development/atom/use-system-electron.patch
@@ -0,0 +1,101 @@
+diff -Naur a/script/build b/script/build
+--- a/script/build 2017-02-17 10:53:06.000000000 -0600
++++ b/script/build 2017-02-22 23:35:29.241396450 -0600
+@@ -23,7 +23,6 @@
+ .wrap(yargs.terminalWidth())
+ .argv
+
+-const checkChromedriverVersion = require('./lib/check-chromedriver-version')
+ const cleanOutputDirectory = require('./lib/clean-output-directory')
+ const codeSignOnMac = require('./lib/code-sign-on-mac')
+ const compressArtifacts = require('./lib/compress-artifacts')
+@@ -48,7 +47,6 @@
+ process.exit(1)
+ })
+
+-checkChromedriverVersion()
+ cleanOutputDirectory()
+ copyAssets()
+ transpileBabelPaths()
+@@ -60,46 +58,3 @@
+ generateMetadata()
+ generateAPIDocs()
+ dumpSymbols()
+- .then(packageApplication)
+- .then(packagedAppPath => {
+- if (process.platform === 'darwin') {
+- if (argv.codeSign) {
+- codeSignOnMac(packagedAppPath)
+- } else {
+- console.log('Skipping code-signing. Specify the --code-sign option to perform code-signing'.gray)
+- }
+- } else if (process.platform === 'win32') {
+- if (argv.createWindowsInstaller) {
+- return createWindowsInstaller(packagedAppPath, argv.codeSign).then(() => packagedAppPath)
+- }
+- else {
+- console.log('Skipping creating installer. Specify the --create-windows-installer option to create a Squirrel-based Windows installer. Code-signing was skipped too.'.gray)
+- }
+- } else if (process.platform === 'linux') {
+- if (argv.createDebianPackage) {
+- createDebianPackage(packagedAppPath)
+- } else {
+- console.log('Skipping creating debian package. Specify the --create-debian-package option to create it.'.gray)
+- }
+-
+- if (argv.createRpmPackage) {
+- createRpmPackage(packagedAppPath)
+- } else {
+- console.log('Skipping creating rpm package. Specify the --create-rpm-package option to create it.'.gray)
+- }
+- }
+-
+- return Promise.resolve(packagedAppPath)
+- }).then(packagedAppPath => {
+- if (argv.compressArtifacts) {
+- compressArtifacts(packagedAppPath)
+- } else {
+- console.log('Skipping artifacts compression. Specify the --compress-artifacts option to compress Atom binaries (and symbols on macOS)'.gray)
+- }
+-
+- if (argv.install) {
+- installApplication(packagedAppPath)
+- } else {
+- console.log('Skipping installation. Specify the --install option to install Atom'.gray)
+- }
+- })
+diff -Naur a/script/package.json b/script/package.json
+--- a/script/package.json 2017-02-17 10:53:06.000000000 -0600
++++ b/script/package.json 2017-02-22 23:36:47.888097996 -0600
+@@ -8,7 +8,6 @@
+ "colors": "1.1.2",
+ "csslint": "1.0.2",
+ "donna": "1.0.13",
+- "electron-chromedriver": "~1.3",
+ "electron-packager": "7.3.0",
+ "electron-winstaller": "2.5.1",
+ "fs-extra": "0.30.0",
+diff -Naur a/src/main-process/atom-application.coffee b/src/main-process/atom-application.coffee
+--- a/src/main-process/atom-application.coffee 2017-02-17 10:53:06.000000000 -0600
++++ b/src/main-process/atom-application.coffee 2017-02-22 23:33:19.542590377 -0600
+@@ -797,7 +797,7 @@
+ @restart()
+
+ restart: ->
+- args = []
++ args = ["--app=/usr/share/atom"]
+ args.push("--safe") if @safeMode
+ args.push("--log-file=#{@logFile}") if @logFile?
+ args.push("--socket-path=#{@socketPath}") if @socketPath?
+diff -Naur a/src/package-manager.coffee b/src/package-manager.coffee
+--- a/src/package-manager.coffee 2017-02-17 10:53:06.000000000 -0600
++++ b/src/package-manager.coffee 2017-02-25 02:23:32.459106058 -0600
+@@ -145,7 +145,7 @@
+ apmRoot = path.join(process.resourcesPath, 'app', 'apm')
+ @apmPath = path.join(apmRoot, 'bin', commandName)
+ unless fs.isFileSync(@apmPath)
+- @apmPath = path.join(apmRoot, 'node_modules', 'atom-package-manager', 'bin', commandName)
++ @apmPath = path.join('/usr/share/atom/resources/app/apm', 'node_modules', 'atom-package-manager', 'bin', commandName)
+ @apmPath
+
+ # Public: Get the paths being used to look for packages.