#!/bin/sh # Generated by Alien's SlackBuild Toolkit: http://slackware.com/~alien/AST # Copyright 2009, 2010, 2011, 2012, 2013, 2014, 2015 Eric Hameleers, Eindhoven, Netherlands # Copyright 2015-2017 Thorn Inurcide # Copyright 2015-2017 tde-slackbuilds project on GitHub # All rights reserved. # # Permission to use, copy, modify, and distribute this software for # any purpose with or without fee is hereby granted, provided that # the above copyright notice and this permission notice appear in all # copies. # # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. PRGNAM=tdeedu VERSION=$TDEVERSION BUILD=${BUILD:-1} TAG=${TAG:-_tde} [[ $(cat $TMPVARS/PRE_DOWNLOAD) != yes ]] && { # ### Kalzium Chemical Equation Solver - start ## Needs OCaml and facile ocaml_installed_fn () { [[ -s /usr/local/lib$LIBDIRSUFFIX/ocaml/libnums.a ]] && \ [[ -s /usr/local/lib$LIBDIRSUFFIX/ocaml/facile/facile.a ]] ;} ## If they are already installed, go to OCAML="ON" ocaml_installed_fn || { ## otherwise, if the source archives are in 'src' .. [[ -s $BUILD_TDE_ROOT/src/4.05.0.tar.gz ]] && \ [[ -s $BUILD_TDE_ROOT/src/facile-1.1.3.tar.gz ]] && { ## .. build, package, and install them ( ## ocaml: echo -e "\n building ocaml \n" cd /$TMP_BUILD rm -rf *ocaml* tar xf $BUILD_TDE_ROOT/src/4.05.0.tar.gz cd ocaml-4.05.0/ ## patch for error caused by glibc-2.34: ## signals_asm.c:197:13: error: variably modified ‘sig_alt_stack’ at file scope ## Refs: https://github.com/ocaml/ocaml/{issues/10250,pull/10266} ## https://github.com/dra27/ocaml/[pull/56] ## └ 0d2c1fd77b4715c70d0ffc4348f1bc2d3eaacbf7 refs/remotes/origin/alt-signal-stack-4.05 ## └ commit 50c2d1275e537906ea144bd557fde31e0bf16e5f patch -p0 << EOF --- asmrun/fail.c +++ asmrun/fail.c @@ -33,0 +34,2 @@ +extern void caml_terminate_signals(void); + @@ -63 +65,4 @@ - if (caml_exception_pointer == NULL) caml_fatal_uncaught_exception(v); + if (caml_exception_pointer == NULL) { + caml_terminate_signals(); + caml_fatal_uncaught_exception(v); + } --- asmrun/signals_asm.c +++ asmrun/signals_asm.c @@ -197 +196,0 @@ -static char sig_alt_stack[SIGSTKSZ]; @@ -298,8 +297,18 @@ - stk.ss_sp = sig_alt_stack; - stk.ss_size = SIGSTKSZ; - stk.ss_flags = 0; - SET_SIGACT(act, segv_handler); - act.sa_flags |= SA_ONSTACK | SA_NODEFER; - sigemptyset(&act.sa_mask); - system_stack_top = (char *) &act; - if (sigaltstack(&stk, NULL) == 0) { sigaction(SIGSEGV, &act, NULL); } + /* Allocate and select an alternate stack for handling signals, + especially SIGSEGV signals. + The alternate stack used to be statically-allocated for the main thread, + but this is incompatible with Glibc 2.34 and newer, where SIGSTKSZ + may not be a compile-time constant. */ + stk.ss_sp = malloc(SIGSTKSZ); + if (stk.ss_sp != NULL) { + stk.ss_size = SIGSTKSZ; + stk.ss_flags = 0; + SET_SIGACT(act, segv_handler); + act.sa_flags |= SA_ONSTACK | SA_NODEFER; + sigemptyset(&act.sa_mask); + system_stack_top = (char *) &act; + if (sigaltstack(&stk, NULL) == 0) + sigaction(SIGSEGV, &act, NULL); + else + free(stk.ss_sp); + } @@ -309,0 +319,42 @@ +#endif +} + +/* Termination of signal stuff */ + +#if defined(TARGET_power) || defined(TARGET_s390x) \\ + || defined(TARGET_sparc) && defined(SYS_solaris) \\ + || defined(HAS_STACK_OVERFLOW_DETECTION) +static void set_signal_default(int signum) +{ + struct sigaction act; + sigemptyset(&act.sa_mask); + act.sa_handler = SIG_DFL; + act.sa_flags = 0; + sigaction(signum, &act, NULL); +} +#endif + +void caml_terminate_signals(void) +{ +#if defined(TARGET_sparc) && defined(SYS_solaris) + set_signal_default(SIGILL); +#endif + +#if defined(TARGET_power) + set_signal_default(SIGTRAP); +#endif + +#if defined(TARGET_s390x) + set_signal_default(SIGFPE); +#endif + +#ifdef HAS_STACK_OVERFLOW_DETECTION + set_signal_default(SIGSEGV); + stack_t oldstk, stk; + stk.ss_flags = SS_DISABLE; + if (sigaltstack(&stk, &oldstk) == 0) { + /* If caml_init_signals failed, we are not using an alternate signal stack. + SS_DISABLE will be set in oldstk, and there is nothing to free in this + case. */ + if (! (oldstk.ss_flags & SS_DISABLE)) free(oldstk.ss_sp); + } --- asmrun/startup.c +++ asmrun/startup.c @@ -94,0 +95 @@ +extern void caml_terminate_signals(void); @@ -105,0 +107 @@ + value res; @@ -140,0 +143 @@ + caml_terminate_signals(); @@ -144 +147,3 @@ - return caml_start_program(); + res = caml_start_program(); + caml_terminate_signals(); + return res; --- byterun/sys.c +++ byterun/sys.c @@ -113,0 +114,2 @@ +extern void caml_terminate_signals(void); + @@ -146,0 +149,3 @@ +#ifdef NATIVE_CODE + caml_terminate_signals(); +#endif EOF ## clang build errors: #amd64.S:728:9: error: changed section flags for .rodata.cst8, expected: 0x12 #amd64.S:728:9: error: changed section entsize for .rodata.cst8, expected: 8 ## backport from ocaml commit 8a46d76bf9359b5cc505b3f2f9c81eb624c631fa patch -p0 << EOF --- asmcomp/amd64/emit.mlp +++ asmcomp/amd64/emit.mlp @@ -993,1 +993,1 @@ - | _ -> D.section [".rodata.cst8"] (Some "a") ["@progbits"] + | _ -> D.section [".rodata.cst16"] (Some "aM") ["@progbits";"16"] @@ -1053,2 +1053,3 @@ - | _ -> D.section [".rodata.cst8"] (Some "a") ["@progbits"] + | _ -> D.section [".rodata.cst8"] (Some "aM") ["@progbits";"8"] end; + D.align 8; --- asmrun/amd64.S +++ asmrun/amd64.S @@ -728,1 +728,1 @@ - .section .rodata.cst8,"a",@progbits + .section .rodata.cst16,"aM",@progbits,16 EOF ## force "gcc -fcommon" for gcc10 build - see https://github.com/ocaml/ocaml/issues/9622 ./configure -cc "$COMPILER -fcommon" -libdir /usr/local/lib$LIBDIRSUFFIX/ocaml ## finish build with -j1 if there are race condition errors make ${NUMJOBS:-} world.opt || make world.opt DESTDIR=$TMP_BUILD/package-ocaml make install cd $TMP_BUILD/package-ocaml makepkg -l y -c n $OUTPUT/ocaml-4.05.0-$ARCH-$BUILD.txz installpkg $OUTPUT/ocaml-4.05.0-$ARCH-$BUILD.txz ## facile: echo -e "\n building facile \n" cd /$TMP_BUILD rm -rf *facile* tar xf $BUILD_TDE_ROOT/src/facile-1.1.3.tar.gz cd facile-1.1.3/ sed -i 's|mkdir|& -p|' Makefile ## uses ocaml compiler ./configure make make FACILEDIR=$TMP_BUILD/package-facile/usr/local/lib$LIBDIRSUFFIX/ocaml/facile install cd $TMP_BUILD/package-facile makepkg -l y -c n $OUTPUT/facile-1.1.3-$ARCH-$BUILD.txz installpkg $OUTPUT/facile-1.1.3-$ARCH-$BUILD.txz ) echo -e "\n now building tdeedu \n" ocaml_installed_fn || { echo -e " installation of ocaml/facile failed \n" ; exit 1 ; } } } && \ OCAML="ON" # ### Kalzium Chemical Equation Solver - end } source ../../get-source.sh getsource_fn untar_fn ## patch for kig python scripting error: ## kig: /usr/include/boost/python/object_core.hpp:422: boost::python::api::object_base::~object_base(): Assertion `Py_REFCNT(m_ptr) > 0' failed. ## Re: https://bugs.kde.org/show_bug.cgi?id=401512#c5 sed -i 's| PyTuple_SetItem| Py_XINCREF((objectvect.begin() +i)->ptr());\n&|' kig/scripting/python_scripter.cpp ## add some files to html docs sed -i 's|*.png|& *.svgz README|' cmake/modules/TDEMacros.cmake listdocs_fn chown_fn cd_builddir_fn ## kig python scripting support [[ $(ls -1 /usr/lib$LIBDIRSUFFIX/libboost_python*.so) ]] && KIG_PS="ON" cmake ${G_NINJA:-} ${CMAKE_OPTS:-} \ -DCMAKE_C_FLAGS="$SLKRCFLAGS" \ -DCMAKE_CXX_FLAGS="$SLKRCFLAGS" \ -DCMAKE_C_COMPILER=$COMPILER \ -DCMAKE_CXX_COMPILER=$COMPILER_CXX \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=$INSTALL_TDE \ -DPLUGIN_INSTALL_DIR=$INSTALL_TDE/lib$LIBDIRSUFFIX/$PLUGIN_INSTALL_DIR \ -DLIB_SUFFIX=$LIBDIRSUFFIX \ -DMAN_INSTALL_DIR=$INSTALL_TDE/man \ -DWITH_ARTS="ON" \ -DWITH_GCC_VISIBILITY=${GCC_VIS:-} \ -DWITH_KIG_PYTHON_SCRIPTING=${KIG_PS:-"OFF"} \ -DWITH_LIBUSB="ON" \ -DWITH_OCAML_SOLVER=${OCAML:-"OFF"} \ -DWITH_V4L="ON" \ -DBUILD_BLINKEN="ON" \ -DBUILD_KALZIUM="ON" \ -DBUILD_KANAGRAM="ON" \ -DBUILD_KBRUCH="ON" \ -DBUILD_KEDUCA="ON" \ -DBUILD_KGEOGRAPHY="ON" \ -DBUILD_KHANGMAN="ON" \ -DBUILD_KIG="ON" \ -DBUILD_KITEN="ON" \ -DBUILD_KLATIN="ON" \ -DBUILD_KLETTRES="ON" \ -DBUILD_KMPLOT="ON" \ -DBUILD_KPERCENTAGE="ON" \ -DBUILD_KSTARS="ON" \ -DBUILD_KTOUCH="ON" \ -DBUILD_KTURTLE="ON" \ -DBUILD_KVERBOS="ON" \ -DBUILD_KVOCTRAIN="ON" \ -DBUILD_KWORDQUIZ="ON" \ -DBUILD_DOC="ON" \ -Wno-dev \ .. ## remove obsolete tags doxygen -u doc/kig/scripting-api/Doxyfile.scripting-api make_fn installdocs_fn strip_fn mkdir_install_fn doinst_sh_fn echo " # HOW TO EDIT THIS FILE: # The 'handy ruler' below makes it easier to edit a package description. Line # up the first '|' above the ':' following the base package name, and the '|' on # the right side marks the last column you can put a character in. You must make # exactly 11 lines for the formatting to be correct. It's also customary to # leave one space after the ':'. |-----handy-ruler------------------------------------------------------| $PRGNAM: tdeedu (TDE educational software) $PRGNAM: $PRGNAM: * blinken: the KDE version of the well-known game Simon Says $PRGNAM: * kalzium: periodic table of elements $PRGNAM: * kanagram: an anagram game $PRGNAM: * kbruch: fraction excercise trainer $PRGNAM: * keduca: creation and revision of form-based tests and exams. $PRGNAM: * kgeography: geography learning program $PRGNAM: * khangman: hangman game. $PRGNAM: * kig: interactive geometry $PRGNAM: * kiten: japanese reference tool $PRGNAM: * klatin: aims to help revise or learn Latin $PRGNAM: * klettres: helps to learn the alphabet and to read some syllables $PRGNAM: * kmplot: mathematical function plotter $PRGNAM: * kpercentage: improve skills in calculating percentages $PRGNAM: * kstars: desktop planetarium $PRGNAM: * ktouch: program for learning touch typing $PRGNAM: * kturtle: programming environment using the Logo programming language $PRGNAM: * kverbos: study Spanish verb forms $PRGNAM: * kvoctrain: vocabulary trainer $PRGNAM: * kwordquiz: a powerful way to master new vocabularies " > $PKG/install/slack-desc makepkg_fn