diff options
author | Johnny English | 2017-10-08 23:08:32 +0200 |
---|---|---|
committer | Johnny English | 2017-10-08 23:08:32 +0200 |
commit | bf610c121d55772cb9f3bffbbd1290112d8b3bb3 (patch) | |
tree | facb435410f9c748baa50a2a5a226cdc073a2138 | |
parent | 86434f4758271fb28e32384e9e53b413fd15ce40 (diff) | |
download | aur-bf610c121d55772cb9f3bffbbd1290112d8b3bb3.tar.gz |
change: remove support for currently poorly maintained modules
add: unit testing for the existence of compiled .so libs
change: version bump
-rw-r--r-- | PKGBUILD | 386 |
1 files changed, 221 insertions, 165 deletions
@@ -1,13 +1,15 @@ # Maintainer: dumblob <dumblob@gmail.com> # Contributor: dumblob <dumblob@gmail.com> +_mode=release +#_mode=debug _basename=dao pkgname=${_basename}-git -pkgver=1608.7be283f +pkgver=1783.0e31564f pkgrel=1 # LLVM JIT -pkgdesc='A very lightweight, portable, optionally typed programming language and VM written in C featuring blazingly fast real concurrency, defer, OOP, AOP, bytecode, BNF macros, high-level standard library, advanced modules & bindings and much more!' +pkgdesc='A modern, very lightweight, portable, optionally typed programming language and VM written in C featuring blazingly fast real concurrency, defer, OOP, AOP, bytecode, high-level standard library, advanced modules & bindings and much more!' url='http://www.daovm.net/' license=('BSD') arch=('i686' 'x86_64') @@ -21,42 +23,42 @@ source=( #"$_basename-tools::git+https://github.com/daokoder/$_basename-tools#branch=Compatibility_Clang_3_3" "$_basename-modules::git+https://github.com/daokoder/$_basename-modules" #"$_basename-modules::git+https://github.com/daokoder/$_basename-modules#branch=Compatibility_Clang_3_3" - "DaoCXX::git+https://github.com/daokoder/DaoCXX" - "DaoGenomeTools::git+https://github.com/daokoder/DaoGenomeTools" - "DaoGObject::git+https://github.com/daokoder/DaoGObject" + #"DaoCXX::git+https://github.com/daokoder/DaoCXX" + #"DaoGenomeTools::git+https://github.com/daokoder/DaoGenomeTools" + #"DaoGObject::git+https://github.com/daokoder/DaoGObject" "DaoGraphics::git+https://github.com/daokoder/DaoGraphics" - "DaoGSL::git+https://github.com/daokoder/DaoGSL" - "DaoJIT::git+https://github.com/daokoder/DaoJIT" - "DaoOpenGL::git+https://github.com/daokoder/DaoOpenGL" + #"DaoGSL::git+https://github.com/daokoder/DaoGSL" + #"DaoJIT::git+https://github.com/daokoder/DaoJIT" + #"DaoOpenGL::git+https://github.com/daokoder/DaoOpenGL" "DaoSQL::git+https://github.com/daokoder/DaoSQL" - "DaoSDL::git+https://github.com/daokoder/DaoSDL" + #"DaoSDL::git+https://github.com/daokoder/DaoSDL" ) sha256sums=( - 'SKIP' - 'SKIP' - #'SKIP' - 'SKIP' - #'SKIP' - 'SKIP' - 'SKIP' - 'SKIP' - 'SKIP' - 'SKIP' - 'SKIP' - 'SKIP' - 'SKIP' - 'SKIP' + 'SKIP' # dao + 'SKIP' # dao-tools + #'SKIP' # dao-tools#branch + 'SKIP' # dao-modules + #'SKIP' # dao-modules#branch + #'SKIP' # daocxx + #'SKIP' # daogenometools + #'SKIP' # daogobject + 'SKIP' # daographics + #'SKIP' # daogsl + #'SKIP' # daojit + #'SKIP' # daoopengl + 'SKIP' # daosql + #'SKIP' # daosdl ) -depends=('gcc-libs-multilib') +depends=('gcc-libs-multilib') # -multilib allows running 32b apps on 64b CPUs makedepends=( - #'emscripten-git' (wait until clang 3.6 becomes supported) + #'emscripten-git' # 2017-03-03 13:49:05 UTC+1 clang >=3.6 not yet supported #'genometools' - 'glib2' - 'gobject-introspection' + #'glib2' + #'gobject-introspection' # modules/DaoGraphics/deps/glfw/makefile.dao ###'libgl' # OpenGL for DaoGraphics and DaoOpenGL - 'glu' # OpenGL for DaoGraphics and DaoOpenGL + #'glu' # OpenGL for DaoGraphics and DaoOpenGL 'libx11' # X11 for DaoGraphics 'libxrandr' # Xrandr for DaoGraphics 'libxinerama' # Xinerama for DaoGraphics @@ -68,107 +70,119 @@ makedepends=( 'sqlite' 'libmariadbclient' 'postgresql-libs' - 'libffi' - 'sdl2' - 'cblas' - 'gsl' - 'clang' - 'llvm' # FIXME needed because of the dirty buld-time patch below + #'libffi' # clinker ships with its own version of libffi + #'sdl2' + #'cblas' + #'gsl' + #'clang' + #'llvm' # needed for the dirty buld-time patch below 'readline' 'zlib' ) optdepends=( #'emscripten-git: support for compilation to JavaScript' #'genometools: needed by the DaoGenomeTools module' - 'glib2: needed by the DaoGObject module (runtime binding generation)' - 'gobject-introspection: needed by the DaoGObject module (runtime binding generation)' + #'glib2: needed by the DaoGObject module (runtime binding generation)' + #'gobject-introspection: needed by the DaoGObject module (runtime binding generation)' 'libxinerama: needed by the DaoGraphics module' 'libxi: needed by the DaoGraphics module' 'libxrandr: needed by the DaoGraphics module' + 'libxcursor: needed by the DaoGraphics module' 'glu: needed by the DaoGraphics and DaoOpenGL modules' 'sqlite: needed by the DaoSQLite module' 'libmariadbclient: needed by the DaoMySQL module' 'postgresql-libs: needed by the DaoPostgreSQL module' - 'libffi: needed by the clinker module (allows calling C functions directly from Dao)' - 'sdl2: needed by the DaoSDL module' - 'cblas: needed by the cblas module' - 'gsl: needed by the DaoGSL module (GNU Scientific Library)' - 'clang: needed by clangdao (a C/C++ library autobinding tool)' - 'zlib: needed by the JIT and CXX modules' + # clinker ships with its own version of libffi + #'libffi: needed by the clinker module (allows calling C functions directly from Dao without compiling them as a Dao module)' + #'sdl2: needed by the DaoSDL module' + #'cblas: needed by the cblas module' + #'gsl: needed by the DaoGSL module (GNU Scientific Library)' + #'clang: needed by clangdao (binding generator for C/C++ libs)' + #'zlib: needed by the JIT and CXX modules' ) provides=('dao') conflicts=('dao') replaces=('dao-lang-git') +pkgver() { + cd "$_basename" + echo "$(git rev-list --count HEAD).$(git rev-parse --short HEAD)" +} + build() { mv "$_basename-tools/"* "$_basename/tools/" + # FIXME 2017-03-03 13:49:05 UTC+1 clang >=3.6 not yet supported + rm -r "$_basename/tools/clangdao/" + mv "$_basename-modules/"* "$_basename/modules/" + # not maintained #mv "DaoCXX/" "$_basename/modules/" - # FIXME not getting compiled - mv "DaoGenomeTools/" "$_basename/modules/" - # FIXME not getting compiled - mv "DaoGObject/" "$_basename/modules/" - # FIXME not updated to the current Dao - #mv "DaoGraphics/" "$_basename/modules/" - mv "DaoGSL/" "$_basename/modules/" - # FIXME not getting compiled + # not maintained + #mv "DaoGenomeTools/" "$_basename/modules/" + # not maintained + #mv "DaoGObject/" "$_basename/modules/" + mv "DaoGraphics/" "$_basename/modules/" + # not maintained + #mv "DaoGSL/" "$_basename/modules/" + # not maintained #mv "DaoJIT/" "$_basename/modules/" - mv "DaoOpenGL/" "$_basename/modules/" + # not maintained + #mv "DaoOpenGL/" "$_basename/modules/" mv "DaoSQL/" "$_basename/modules/" - # FIXME see also below `sed -i ...' - # wrap/dao_sdl.h:18:16: fatal error: SDL.h: No such file or directory - # #include"SDL.h" + # not maintained #mv "DaoSDL/" "$_basename/modules/" + cd "$_basename" - # FIXME https://github.com/daokoder/dao-modules/issues/73 -# rm -rf modules/clinker/ - - # order matters when using gcc - patch -R tools/clangdao/makefile.dao <<\EOF -@@ -44,9 +44,9 @@ - clangdao_exe.AddLinkingFlag( "-lclangSema" ) - clangdao_exe.AddLinkingFlag( "-lclangAnalysis" ) - clangdao_exe.AddLinkingFlag( "-lclangAST" ) --clangdao_exe.AddLinkingFlag( "-lclangEdit" ) - clangdao_exe.AddLinkingFlag( "-lclangLex" ) - clangdao_exe.AddLinkingFlag( "-lclangBasic" ) -+clangdao_exe.AddLinkingFlag( "-lclangEdit" ) - clangdao_exe.AddLinkingFlag( "-lclangSerialization" ) - clangdao_exe.AddLinkingFlag( "-lclangStaticAnalyzerCheckers" ) - clangdao_exe.AddLinkingFlag( "-lclangStaticAnalyzerCore" ) -EOF - # each object file includes symbols from Clang and LLVM (and Clang - # object files in turn include symbols from LLVM) - sed -i -r "/-lclangStaticAnalyzerFrontend/a\ - clangdao_exe.AddLinkingFlag( \"$(llvm-config --libs)\" )" \ - tools/clangdao/makefile.dao - # Clang 3.6 uses std::unique_ptr<> => wrap pointers - patch tools/clangdao/clangdao.cpp <<\EOF -@@ -457,7 +457,7 @@ - compiler.createSourceManager(compiler.getFileManager()); - compiler.createPreprocessor( TU_Complete ); - compiler.createASTContext(); -- compiler.setASTConsumer( new CDaoASTConsumer( & compiler, & module ) ); -+ compiler.setASTConsumer( unique_ptr<clang::ASTConsumer>( new CDaoASTConsumer( & compiler, & module ) ) ); - //XXX compiler.createSema(false, NULL); - //compiler.createSema(TU_Module, NULL); - compiler.createSema(TU_Prefix, NULL); -@@ -478,7 +478,7 @@ - //outs()<<builtinDefines<<"\n"; - - pp.setPredefines( builtinDefines + "\n" + predefines ); -- pp.addPPCallbacks( new CDaoPPCallbacks( & compiler, & module ) ); -+ pp.addPPCallbacks( unique_ptr<clang::PPCallbacks>( new CDaoPPCallbacks( & compiler, & module ) ) ); - - InputKind ik = FrontendOptions::getInputKindForExtension( main_input_file ); - compiler.InitializeSourceManager( FrontendInputFile( main_input_file, ik ) ); -EOF - - # LLVM 3.6 renamed JIT to MCJIT and added std::unique_ptr<> => wrap pointers -#patch modules/DaoJIT/daoJIT.cpp <<\EOF + +# # FIXME https://github.com/daokoder/dao-modules/issues/73 +# rm -r modules/clinker/ + +# # order matters when using gcc +# patch -R tools/clangdao/makefile.dao <<\EOF +# @@ -44,9 +44,9 @@ +# clangdao_exe.AddLinkingFlag( "-lclangSema" ) +# clangdao_exe.AddLinkingFlag( "-lclangAnalysis" ) +# clangdao_exe.AddLinkingFlag( "-lclangAST" ) +# -clangdao_exe.AddLinkingFlag( "-lclangEdit" ) +# clangdao_exe.AddLinkingFlag( "-lclangLex" ) +# clangdao_exe.AddLinkingFlag( "-lclangBasic" ) +# +clangdao_exe.AddLinkingFlag( "-lclangEdit" ) +# clangdao_exe.AddLinkingFlag( "-lclangSerialization" ) +# clangdao_exe.AddLinkingFlag( "-lclangStaticAnalyzerCheckers" ) +# clangdao_exe.AddLinkingFlag( "-lclangStaticAnalyzerCore" ) +# EOF +# # each object file includes symbols from Clang and LLVM (and Clang +# # object files in turn include symbols from LLVM) +# sed -i -r "/-lclangStaticAnalyzerFrontend/a\ +# clangdao_exe.AddLinkingFlag( \"$(llvm-config --libs)\" )" \ +# tools/clangdao/makefile.dao +# # Clang 3.6 uses std::unique_ptr<> => wrap pointers +# patch tools/clangdao/clangdao.cpp <<\EOF +# @@ -457,7 +457,7 @@ +# compiler.createSourceManager(compiler.getFileManager()); +# compiler.createPreprocessor( TU_Complete ); +# compiler.createASTContext(); +# - compiler.setASTConsumer( new CDaoASTConsumer( & compiler, & module ) ); +# + compiler.setASTConsumer( unique_ptr<clang::ASTConsumer>( new CDaoASTConsumer( & compiler, & module ) ) ); +# //XXX compiler.createSema(false, NULL); +# //compiler.createSema(TU_Module, NULL); +# compiler.createSema(TU_Prefix, NULL); +# @@ -478,7 +478,7 @@ +# //outs()<<builtinDefines<<"\n"; +# +# pp.setPredefines( builtinDefines + "\n" + predefines ); +# - pp.addPPCallbacks( new CDaoPPCallbacks( & compiler, & module ) ); +# + pp.addPPCallbacks( unique_ptr<clang::PPCallbacks>( new CDaoPPCallbacks( & compiler, & module ) ) ); +# +# InputKind ik = FrontendOptions::getInputKindForExtension( main_input_file ); +# compiler.InitializeSourceManager( FrontendInputFile( main_input_file, ik ) ); +# EOF + +# # LLVM 3.6 renamed JIT to MCJIT and added std::unique_ptr<> => wrap pointers +# patch modules/DaoJIT/daoJIT.cpp <<\EOF #@@ -38,7 +38,7 @@ # #include "llvm/IR/Verifier.h" # #include "llvm/Analysis/Passes.h" @@ -265,104 +279,146 @@ EOF # return 1; #EOF + # FIXME 2017-03-05 22:55:38 UTC+1 fill a bug as the .so is useless (unlike .a) + sed -i -r '/AddSharedLibrary/d' modules/web/html/gumbo-parser/makefile.dao + + # namcap: ELF file outside of a valid path + sed -i -r '/sample_dll/d' modules/clinker/makefile.dao + + # FIXME 2017-03-05 22:55:38 UTC+1 fill a bug as the .so is useless (unlike .a) + sed -i -r '/ffi_dll/d' modules/clinker/libffi/makefile.dao + + # FIXME 2017-03-05 22:55:38 UTC+1 https://github.com/daokoder/dao-modules/issues/86 + # the module is not any more available (FIXME but is used in documentation) + #rm -r modules/protobject/ + + # FIXME 2017-03-05 22:55:38 UTC+1 https://github.com/daokoder/dao-modules/issues/87 + rm -r modules/macro/ + + # FIXME 2017-03-05 22:55:38 UTC+1 fill a bug as the .so is useless (unlike .a) + sed -i -r '/onigmo_dll/d' modules/regex/Onigmo/makefile.dao + + # FIXME 2017-03-05 22:55:38 UTC+1 https://github.com/daokoder/dao-modules/issues/88 + rm -r modules/cblas/ + + # FIXME 2017-03-05 22:55:38 UTC+1 https://github.com/daokoder/dao-modules/issues/89 + rm -r modules/testing/ + # gl.h is provided by mesa - sed -i -r 's|(#include) *"gl.h"|\1 <GL/gl.h>|' \ - modules/DaoOpenGL/wrap/dao_opengl.h + #sed -i -r 's|(#include) *"gl.h"|\1 <GL/gl.h>|' \ + # modules/DaoOpenGL/wrap/dao_opengl.h # https://github.com/daokoder/DaoSQL/issues/2 sed -i -r 's|(#include) *"mysql.h"|\1 <mysql/mysql.h>|' \ modules/DaoSQL/DaoMySQL/daoMySQL.h - # FIXME https://github.com/daokoder/DaoSDL/issues/2 - #sed -i -r 's|(#include) *"(SDL[^"]+)"|\1 <SDL2/\2>|' \ - # modules/DaoSDL/wrap/dao_sdl.h - - # enable disabled-by-default GObject bindings - # FIXME not getting compiled (not anymore in dao-modules/makefile.dao???) - patch modules/DaoGObject/makefile.dao <<\EOF -@@ -4,7 +4,8 @@ - glib = DaoMake::FindPackage( "GLib", $REQUIRED ) - gir = DaoMake::FindPackage( "GIR", $REQUIRED ) - --if( daovm == none or ffi == none or glib == none or gir == none ) return -+if( daovm == none or ffi == none or glib == none or gir == none ) -+ std.error( 'one of packages daovm, ffi, glib, gir is missing' ) - - project = DaoMake::Project( "DaoGobject" ) - -@@ -35,7 +36,7 @@ - - - --#project.GenerateFinder( $TRUE ); --#project.Install( daovm.GetPath( "MOD-PATH" ), gobject_dll ); --#project.Install( daovm.GetPath( "MOD-PATH" ), ffiite_dll ); --#project.Install( daovm.GetPath( "MOD-PATH" ), myffi_dll ); -+project.GenerateFinder( $TRUE ); -+project.Install( daovm.GetPath( "MOD-PATH" ), gobject_dll ); -+project.Install( daovm.GetPath( "MOD-PATH" ), ffiite_dll ); -+project.Install( daovm.GetPath( "MOD-PATH" ), myffi_dll ); -EOF - - # FIXME should dao.conf be installed along with Dao? - sed -i -r -e "s/# *(cpu *=).*/\1$(grep '^processor' /proc/cpuinfo | wc -l)/" \ - dao.conf - #-e 's/# *(jit *=).*/\1yes/' dao.conf - - # stop right after the daomake tool creates the Makefile + # FIXME is dao.conf needed to be installed along with Dao VM? + sed -i -r -e \ + "s/# *(cpu *=).*/\1$(grep '^processor' /proc/cpuinfo | wc -l)/" dao.conf + #'s/# *(jit *=).*/\1yes/' dao.conf + + # DEBUG stop right after the daomake tool creates the Makefile #sed -i -r 's|^[[:space:]]*\$\(MAKE\)[[:space:]]*$||' Makefile.daomake - # FIXME catch the daomake segfault + # DEBUG catch daomake segfaults #sed -i -r -e 's|([.]/daomake)|valgrind \1|' tools/daomake/bootstrap/Makefile #sed -i -r -e 's|(\$\(SRCDIR\)/tools/daomake/bootstrap/daomake)|valgrind \1|' \ # Makefile.daomake - # FIXME disable testing + # DEBUG disable testing #sed -i -r -e 's|^(.*DaoMake::SetTestTool)|#\1|' makefile.dao #sed -i -r -e '/DaoMake::SetTestTool/s|testcmd|"true"|' makefile.dao - # FIXME disable generation of finders, because they contain - # compile-time specific paths - #make -f Makefile.daomake linux MODE=debug RESET='--reset' \ - # OPTIONS="--option-INSTALL-PATH '/usr' --no-local-rpath" - make -f Makefile.daomake linux MODE=release RESET='--reset' \ + make -f Makefile.daomake linux MODE="$_mode" RESET='--reset' \ OPTIONS="--option-INSTALL-PATH '/usr' --no-local-rpath" } -pkgver() { - cd "$_basename" - echo "$(git rev-list --count HEAD).$(git rev-parse --short HEAD)" -} - package() { cd "$_basename" make install INSTALL="$pkgdir/usr" - # ELF file outside of a valid path - [ -e "$pkgdir/usr/share/dao/demo/modules/clinker/libsample.so" ] && - rm "$pkgdir/usr/share/dao/demo/modules/clinker/libsample.so" + # finders contain build-specific paths ( + # note 'rm -r ...packages/' would hide non-Find* files) + # FIXME do not generate them in build() + rm "$pkgdir/usr/lib/daomake/packages/"Find* + rmdir "$pkgdir/usr/lib/daomake/packages/" # inst <src> <dst> + # if <dst> does not end with a slash, it's a path and name of the resulting + # file or dir (if the file or dir already exists, it's an error) inst() { # FIXME make it aware of system-wide policy on chmod & chown of dirs - [ ! -d "$2" ] && { - if [ "$(printf %s "$2" | sed -r 's|.*(.)$|\1|')" = '/' ]; then - mkdir -p "$2" - else - mkdir -p "$(dirname "$2")" - fi - } + # just 'sudo umask'? + + if [ "$(printf %s "$2" | sed -r 's|.*(.)$|\1|')" = '/' ]; then + [ -d "$2" ] || mkdir -p -- "$2" + else + [ -e "$2" ] && { + printf 'ERR inst(): %s\nERR inst(): %s\n' \ + "$2" "^^^destination already exists, can't install." >&2 + false + return + } + mkdir -p -- "$(dirname "$2")" + fi + cp -p -r -- "$1" "$2" # FIXME print the resulting file/dir full path } inst license.txt "$pkgdir/usr/share/licenses/$pkgname/LICENSE" - chmod 644 "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + chmod 644 -- "$pkgdir/usr/share/licenses/$pkgname/LICENSE" inst share/dao-logo.png "$pkgdir/usr/share/icons/" inst share/daohelp.vim "$pkgdir/usr/share/vim/vimfiles/syntax/" inst share/dao.vim "$pkgdir/usr/share/vim/vimfiles/syntax/" inst tools/webdemo/ "$pkgdir/usr/share/$_basename/" - mkdir -p "$pkgdir/usr/share/doc/" - # all links in the doc are relative - mv "$pkgdir/usr/share/$_basename/doc/" "$pkgdir/usr/share/doc/$_basename" + mkdir -p -- "$pkgdir/usr/share/doc/" + # all links in the doc are already relative + mv -- "$pkgdir/usr/share/$_basename/doc/" "$pkgdir/usr/share/doc/$_basename" + + # Unit testing + + # Finders are useless and their content baffles unit testing + # FIXME daomake could remove them after using them + for f in "$srcdir/$_basename/modules/"*/CacheFind*.dao \ + "$srcdir/$_basename/modules/"*/FindDao*.dao; do + [ -e "$f" ] && rm -- "$f" + done + + # no need to clean it using + # trap 'rm -rf -- "$_tmpd"' EXIT TERM INT HUP KILL + _tmpd="$(mktemp -p "$srcdir" -d XXXX)" + + ( LC_ALL=C + cd -- "$srcdir/$_basename/modules/" + + find . -type f -name '*.dao' | + while read f; do + grep -Eo \ +'^[^#]*[^_[:alpha:][:digit:]]AddSharedLibrary[^(]*[(][[:blank:]]+"[^"].*' \ + "$f" | + sed -r 's|^.*AddSharedLibrary[^"]+"([^"]+).*$|\1|' | + while read lib; do + # include full path (names alone appear more than once) + printf '%s\n' "$(dirname "$f")/lib${lib}.so" + done + # "string/" and "DaoSQL/" are exceptions to the rule + done | sed -r -e 's%((string/)|[^/]+/)([^/]+)$%\2\3%' -e 's|DaoSQL/||' | + sort | uniq + ) > "$_tmpd/libs_expected" + + ( LC_ALL=C + cd -- "$pkgdir/usr/lib/$_basename/modules/" + find . -type f -iname '*.so' | sort + ) > "$_tmpd/libs_found" + + _diff="$(diff -urN -- "$_tmpd/libs_expected" "$_tmpd/libs_found")" + + [ -z "$_diff" ] || { + printf '%s\n' "$_diff" >&2 + false + } + + [ "$_mode" = 'release' ] || printf '\n%s\n' \ + 'WARN Non-release build built! Did you set MODE=debug in PKGBUILD?' >&2 } |