digego / extempore

A cyber-physical programming environment
1.4k stars 127 forks source link

Switch from CMake's ExternalProject to git submodules #380

Open fpesari opened 4 years ago

fpesari commented 4 years ago

Hello,

I am building an extempore package for openSUSE.

openSUSE uses an automated build system called OBS which works in a virtualized environment without an internet connection.

Right now extempore extensively uses CMake to download external libraries. This makes compiling it without the internet really hard, especially because packages are downloaded at build time.

Switching to git submodules is a very simple change which makes the life of packagers much easier.

benswift commented 4 years ago

Hey there, thanks for the heads up---I've never used openSUSE and didn't know about the "no internet during build" thing. Does Extempore build from source ok on openSUSE (i.e. not in OBS)?

Currently not all the things that the build process uses ExternalPackage_Add are git repos (e.g. LLVM's just a tarball), although obviously this could be changed. I guess the submodule thing adds an extra "init submodules" step to the git clone & build process, and also means cloning the entire history for each external lib project rather than just a tarball of master, although neither of those are necessarily dealbreakers.

I don't have any time right at this minute to re-jig the build process to use git submodules, but it's something I can look into in the future.

fpesari commented 4 years ago

Hey there, thanks for the heads up---I've never used openSUSE and didn't know about the "no internet during build" thing. Does Extempore build from source ok on openSUSE (i.e. not in OBS)?

Technically my local openSUSE build stops at 58% of the progress with this error:

Error copying file "librtmidi.so" to "extempore-0.8.6/libs/platform-shlibs".

It copies libkiss_fft.so and libportmidi.so fine, though.

I guess the submodule thing adds an extra "init submodules" step to the git clone & build process, and also means cloning the entire history for each external lib project rather than just a tarball of master, although neither of those are necessarily dealbreakers.

Technically submodules can be downloaded during cloning:

git clone --recurse-submodules https://github.com/digego/extempore

But I agree that most people who clone into repos don't necessarily think of it immediately! It could be specified in the build instructions, though.

Git submodules are very used nowadays and that's why I proposed them, as a compromise. They are not the most comfortable solution though, that'd be including pre-downloaded directories, but that does take more space and some devs might be opposed to it. My personal belief is that nowadays hard disk space is aplenty so it should not be a concern, but I understand other views.

benswift commented 4 years ago

Ok, thanks.

Technically my local openSUSE build stops at 58% of the progress with this error:

Error copying file "librtmidi.so" to "extempore-0.8.6/libs/platform-shlibs".

Hmm, any idea why it's failing?

Re: the submodule thing, as you say there are pros and cons---but your points are valid. I guess the first step is to get it building successfully, then to worry about the packaging part.

fpesari commented 4 years ago

Hmm, any idea why it's failing?

I checked and they build correctly. Maybe it doesn't get copied because unlike the other libraries (which are copied indeed), librtmidi.so is actually a symlink and the real library is librtmidi.so.5.0.0.

Since those are shared libraries, is there a way to tell CMake to use my system's libraries instead of building them?

benswift commented 4 years ago

Ok, that's a bummer. Extempore has some kinda kludgey stuff in CMakeLists.txt for moving the build so into place, which works ok on other distros but looks like it might be broken here.

I don't know if the symlink is the problem; on macOS it's the same (librtmidi.5.0.0.dylib is the real file, and librtmidi.dylib is just a symlink) but it seems to work.

I'm not saying this hacked-together approach is great; it's pretty painful (I know---I had to write it 😉 ). But having a build process which works across macOS/Win/Ubuntu at least is a pretty high priority, and this is the way we currently achieve it.

I have done a bunch of work this morning refactoring the ExternalProject stuff so that there's less duplication and that it's better separated from the AOT stuff, so in principle that'd make it easier to refactor in the future. That stuff is in the cmake-update branch, but it doesn't work yet.

benswift commented 4 years ago

Oh, and on your other question about using the system shared libs, you could just set EXTERNAL_SHLIBS_AUDIO and EXTERNAL_SHLIBS_GRAPHICS to off, and just build them yourself. bind-dylib in Extempore code will actually look in the system shared lib path (on platforms where that makes sense, i.e. not on Windows).

However, be warned that the argument/return types are hard-coded into the various xtm files, so if you use a version of the shared lib with a different API in any way then things will probably break.

fpesari commented 4 years ago

Oh, and on your other question about using the system shared libs, you could just set EXTERNAL_SHLIBS_AUDIO and EXTERNAL_SHLIBS_GRAPHICS to off, and just build them yourself. bind-dylib in Extempore code will actually look in the system shared lib path (on platforms where that makes sense, i.e. not on Windows).

However, be warned that the argument/return types are hard-coded into the various xtm files, so if you use a version of the shared lib with a different API in any way then things will probably break.

With both EXTERNAL_SHLIBS_AUDIO and EXTERNAL_SHLIBS_GRAPHICS set to off, the build went ahead until it ran an xtm file, like you said:

Evaluating expression: (impc:aot:compile-xtm-file "libs/external/gl/glcore-directbind.xtm")

INFO: started compiling libs/external/gl/glcore-directbind.xtm
Loading xtmbase library... done in 0.915719 seconds
sys:load notification base already loaded 
Error: could not find libGL dynamic library
benswift commented 4 years ago

Ok, cool, good to know.

Error: could not find libGL dynamic library

This means that it can't find libGL.so; I'm not sure what package is required to get that on SUSE. So that's not related to the "turn of the external shlibs" thing.

There's a bigger issue, though---because many other extempore libraries (e.g. libs/external/glfw3.xtm won't work because they're now no longer being built.

If you just build the extempore target and try and load one of the "core" libraries, does that work? E.g. something like:

mkdir build && cd build && cmake -DASSETS=ON .. && make extempore
cd .. && ./build/extempore --run libs/core/math.xtm
fpesari commented 4 years ago

This means that it can't find libGL.so; I'm not sure what package is required to get that on SUSE. So that's not related to the "turn of the external shlibs" thing.

It should be Mesa-libGL, which is installed on my machine.

Could it have something to do with the fact that openSUSE installs 64-bit libraries to /usr/lib64?

Hard-coded references to /usr/lib It's one thing we packagers often have to manually patch.

If you just build the extempore target and try and load one of the "core" libraries, does that work? E.g. something like:

mkdir build && cd build && cmake -DASSETS=ON .. && make extempore
cd .. && ./build/extempore --run libs/core/math.xtm

Yes, it does build. When I run it, this is the output:

INFO: starting utility process...
INFO: server: accepted new connection to utility process
INFO: client: connected to server utility process at localhost:7098
INFO: starting primary process...
INFO: server: accepted new connection to primary process
INFO: client: connected to server primary process at localhost:7099
Loading xtmbase library... done in 0.995680 seconds
benswift commented 4 years ago

Yes, it does build. When I run it, this is the output:

INFO: starting utility process...
INFO: server: accepted new connection to utility process
INFO: client: connected to server utility process at localhost:7098
INFO: starting primary process...
INFO: server: accepted new connection to primary process
INFO: client: connected to server primary process at localhost:7099
Loading xtmbase library... done in 0.995680 seconds

Does it load the math lib though (when you pass --run libs/core/math.xtm)? Is that the last output that you get, or is there more?

fpesari commented 4 years ago

Does it load the math lib though (when you pass --run libs/core/math.xtm)? Is that the last output that you get, or is there more?

No, it doesn't - what I posted is the absolute last output (I tried again, same results)

benswift commented 4 years ago

Hmm, ok. I take it that means you can't load the math library interactively, either (by starting Extempore, connecting your editor, and evaluating (sys:load "libs/core/math.xtm")?

If that's the case, then sadly there are bigger issues than CMake's ExternalProject not working, sadly 😢

fpesari commented 4 years ago

Hmm, ok. I take it that means you can't load the math library interactively, either (by starting Extempore, connecting your editor, and evaluating (sys:load "libs/core/math.xtm")?

If that's the case, then sadly there are bigger issues than CMake's ExternalProject not working, sadly cry

The good news is that it's not an infinite loop, it goes into nanosleep, I wonder what could be the problem...my debugging skill are rusty from years of dynamic language usage!

Could you please share the correct output for running ./extempore?

Edit: I tried ./extempore --nobase and it stops too

benswift commented 4 years ago

The sleep is ok--extempore should go into a wait loop when it's finished loading all the things (it's waiting for code to eval, e.g. as sent by a text editor plugin).

Without AOT-compiling the xtlang libraries, you should see something like:

$ ./extempore --run libs/core/math.xtm
------------- Extempore -------------- 
Andrew Sorensen (c) 2010-2020
andrew@moso.com.au, @digego

ARCH           : x86_64-unknown-linux-gnu
CPU            : knl
ATTRS          : -sse4a,-avx512bw,+cx16,-tbm,+xsave,-fma4,-avx512vl,+prfchw,+bmi2,+adx,+xsavec,+fsgsbase,+avx,-avx512cd,-avx512pf,+rtm,+popcnt,+fma,+bmi,+aes,+rdrnd,+xsaves,+sse4.1,+sse4.2,+avx2,-avx512er,+sse,+lzcnt,+pclmul,-avx512f,+f16c,+ssse3,+mmx,-pku,+cmov,-xop,+rdseed,+movbe,+hle,+xsaveopt,-sha,+sse2,+sse3,-avx512dq
LLVM           : 3.8.0 MCJIT
Output Device  : default
Input Device   : 
SampleRate     : 44100
Channels Out   : 2
Channels In    : 0
Frames         : 1024
Latency        : 0.0464399 sec
Primary        : thread 0
---------------------------------------
INFO: starting utility process...
INFO: server: accepted new connection to utility process
INFO: client: connected to server utility process at localhost:7098
INFO: starting primary process...
INFO: server: accepted new connection to primary process
INFO: client: connected to server primary process at localhost:7099

Evaluating expression: (sys:load "libs/core/math.xtm")

SetAlias:  bool >>> i1
SetAlias:  size_t >>> i64
SetAlias:  enum >>> i32
SetValue:  PIf >>> float
SetValue:  TWOPIf >>> float
SetValue:  Ef >>> float
SetValue:  PI >>> double
SetValue:  TWOPI >>> double
SetValue:  E >>> double
SetAlias:  SAMPLE >>> float
SetAlias:  DSP >>> [float,float,i64,i64,float*]*
SetAlias:  DSPMT >>> [float,float*,i64,i64,float*]*
SetAlias:  DSPMC >>> [void,float*,float*,i64,i8*]*
SetAlias:  DSPMCMT >>> [void,float**,float*,i64,i8*]*
Compiled:  audio_64bit >>> [i1]*
SetValue:  SPI >>> float
SetValue:  STWOPI >>> float
SetValue:  SE >>> float
bind-ext-val:  SAMPLE_RATE >>> i32
SetValue:  SAMPLERATE >>> float
SetValue:  SRs >>> float
SetValue:  SRf >>> float
SetValue:  SRd >>> double
SetValue:  SR >>> i64
bind-ext-val:  CHANNELS >>> i32
bind-ext-val:  IN_CHANNELS >>> i32
bind-ext-val:  NUM_FRAMES >>> i32
SetValue:  FRAMES >>> i64
SetValue:  NaNf >>> float
SetValue:  NaN >>> double
Compiled:  set_float_nans_ >>> [void]*
Compiled:  print_return >>> [void]*
Compiled:  print_space >>> [void]*
Compiled:  print >>> [void,i1]*
Compiled:  print >>> [void,i8]*
Compiled:  print >>> [void,i16]*
Compiled:  print >>> [void,i32]*
Compiled:  print >>> [void,i64]*
Compiled:  print >>> [void,float]*
Compiled:  print >>> [void,double]*
GenrFunc:  print >>> [void,!a]*
GenrFunc:  print >>> [void,!a]*
GenrFunc:  print >>> [void,!a]*
GenrFunc:  print >>> [void,!a]*
GenrFunc:  print >>> [void,!a]*
GenrFunc:  print >>> [void,!a]*
GenrFunc:  print >>> [void,!a]*
GenrFunc:  print >>> [void,!a]*
GenrFunc:  print >>> [void,!a]*
GenrFunc:  print >>> [void,!a]*
GenrFunc:  print >>> [void,!a]*
XtmMacro:  size_of >>> 
XtmMacro:  inc >>> 
XtmMacro:  dec >>> 
XtmMacro:  min >>> 
XtmMacro:  max >>> 
XtmMacro:  clamp >>> 
XtmMacro:  logn >>> 
XtmMacro:  deg2rad >>> 
XtmMacro:  rad2deg >>> 
XtmMacro:  evenp >>> 
XtmMacro:  oddp >>> 
XtmMacro:  tbind >>> 
XtmMacro:  get_native_name >>> 
XtmMacro:  get_native_fptr >>> 
XtmMacro:  -> >>> 
XtmMacro:  ->> >>> 
PolyFunc:  random with imp_randf >>> [float]*
PolyFunc:  random with imp_randd >>> [double]*
PolyFunc:  random with imp_rand1_i32 >>> [i32,i32]*
PolyFunc:  random with imp_rand2_i32 >>> [i32,i32,i32]*
PolyFunc:  random with imp_rand1_i64 >>> [i64,i64]*
PolyFunc:  random with imp_rand2_i64 >>> [i64,i64,i64]*
PolyFunc:  random with imp_rand1_f >>> [float,float]*
PolyFunc:  random with imp_rand2_f >>> [float,float,float]*
PolyFunc:  random with imp_rand1_d >>> [double,double]*
PolyFunc:  random with imp_rand2_d >>> [double,double,double]*
PolyFunc:  tan with tan >>> [double,double]*
PolyFunc:  tan with tanf >>> [float,float]*
PolyFunc:  acos with acos >>> [double,double]*
PolyFunc:  acos with acosf >>> [float,float]*
PolyFunc:  asin with asin >>> [double,double]*
PolyFunc:  asin with asinf >>> [float,float]*
PolyFunc:  atan with atan >>> [double,double]*
PolyFunc:  atan with atanf >>> [float,float]*
PolyFunc:  atan2 with atan2 >>> [double,double,double]*
PolyFunc:  atan2 with atan2f >>> [float,float,float]*
PolyFunc:  cosh with cosh >>> [double,double]*
PolyFunc:  cosh with coshf >>> [float,float]*
PolyFunc:  sinh with sinh >>> [double,double]*
PolyFunc:  sinh with sinhf >>> [float,float]*
PolyFunc:  tanh with tanh >>> [double,double]*
PolyFunc:  tanh with tanhf >>> [float,float]*
Compiled:  print >>> [void,mzone*]*
Compiled:  Zone >>> [mzone*,i64]*
Compiled:  reset_zone >>> [mzone*,mzone*]*
Compiled:  destroy_zone >>> [void,mzone*]*
Compiled:  peek_zone >>> [mzone*]*
Compiled:  zcopy >>> [i1,i1,mzone*,mzone*]*
Compiled:  zcopy >>> [i8,i8,mzone*,mzone*]*
Compiled:  zcopy >>> [i32,i32,mzone*,mzone*]*
Compiled:  zcopy >>> [i64,i64,mzone*,mzone*]*
Compiled:  zcopy >>> [float,float,mzone*,mzone*]*
Compiled:  zcopy >>> [double,double,mzone*,mzone*]*
GenrFunc:  zcopy >>> [!a,!a,mzone*,mzone*]*
DataType:  String >>> <i64,i8*>
Compiled:  String >>> [String*,i8*]*
Compiled:  Str >>> [String*,i8*]*
Compiled:  String_h >>> [String*,i8*]*
Compiled:  String_free >>> [void,String*]*
Compiled:  print >>> [void,String*]*
Compiled:  toString >>> [String*,String*]*
Compiled:  String_strlen >>> [i64,String*]*
Compiled:  length >>> [i64,String*]*
Compiled:  validate >>> [i1,String*]*
Compiled:  cstring >>> [i8*,String*]*
Compiled:  String >>> [String*,String*]*
Compiled:  substring >>> [String*,String*,i64,i64]*
Compiled:  cat2 >>> [String*,String*,String*]*
XtmMacro:  cat >>> 
Compiled:  equal >>> [i1,String*,String*]*
Compiled:  trim >>> [String*,String*]*
Compiled:  levenshtein >>> [i64,String*,String*]*
Compiled:  similarity >>> [double,String*,String*]*
Compiled:  replace >>> [String*,i8*,i8*,i8*]*
Compiled:  replace >>> [String*,String*,i8*,i8*]*
Compiled:  replace >>> [String*,String*,i8*,String*]*
Compiled:  replace >>> [String*,String*,String*,String*]*
Compiled:  replace_all >>> [String*,i8*,i8*,i8*]*
Compiled:  replace_all >>> [String*,String*,i8*,i8*]*
Compiled:  replace_all >>> [String*,String*,i8*,String*]*
Compiled:  replace_all >>> [String*,String*,String*,String*]*
GenrFunc:  equal >>> [bool,!a,!a]*
GenrFunc:  equal >>> [bool,!a,!b]*
Compiled:  format_return >>> [String*]*
Compiled:  format_space >>> [String*]*
Compiled:  format >>> [String*,i1]*
Compiled:  format >>> [String*,i8]*
Compiled:  format >>> [String*,i16]*
Compiled:  format >>> [String*,i32]*
Compiled:  format >>> [String*,i64]*
Compiled:  format >>> [String*,float]*
Compiled:  format >>> [String*,double]*
Compiled:  format >>> [String*,String*]*
Compiled:  toString_return >>> [String*]*
Compiled:  toString_space >>> [String*]*
Compiled:  toString >>> [String*,i1]*
Compiled:  toString >>> [String*,i8]*
Compiled:  toString >>> [String*,i16]*
Compiled:  toString >>> [String*,i32]*
Compiled:  toString >>> [String*,i64]*
Compiled:  toString >>> [String*,float]*
Compiled:  toString >>> [String*,double]*
GenrFunc:  toString >>> [String*,!a]*
Compiled:  print >>> [void,i8*]*
Compiled:  toString >>> [String*,i8*]*
GenrType:  Box >>> <!a>
GenrFunc:  unbox >>> [!a,Box*]*
GenrFunc:  print >>> [void,Box*]*
DataType:  Symbol >>> <i64,i8*>
Compiled:  Symbol_free >>> [void,Symbol*]*
Compiled:  print >>> [void,Symbol*]*
Compiled:  toString >>> [String*,Symbol*]*
Compiled:  length >>> [i64,Symbol*]*
Compiled:  size >>> [i64,Symbol*]*
Compiled:  cstring >>> [i8*,Symbol*]*
Compiled:  Symbol >>> [Symbol*,i8*]*
Compiled:  Symbol >>> [Symbol*,Symbol*]*
Compiled:  equal >>> [i1,Symbol*,Symbol*]*
Compiled:  cat2 >>> [Symbol*,Symbol*,Symbol*]*
Compiled:  vsum >>> [i32,i32*,i64]*
Compiled:  vsum >>> [i64,i64*,i64]*
Compiled:  vsum >>> [float,float*,i64]*
Compiled:  vsum >>> [double,double*,i64]*
Compiled:  vmean >>> [double,i32*,i64]*
Compiled:  vmean >>> [double,i64*,i64]*
Compiled:  vmean >>> [float,float*,i64]*
Compiled:  vmean >>> [double,double*,i64]*
Compiled:  vmin >>> [i32,i32*,i64]*
Compiled:  vmin >>> [i64,i64*,i64]*
Compiled:  vmin >>> [float,float*,i64]*
Compiled:  vmin >>> [double,double*,i64]*
Compiled:  vmax >>> [i32,i32*,i64]*
Compiled:  vmax >>> [i64,i64*,i64]*
Compiled:  vmax >>> [float,float*,i64]*
Compiled:  vmax >>> [double,double*,i64]*
Compiled:  vprint >>> [void,i32*,i64,i64]*
Compiled:  vprint >>> [void,i32*,i64]*
Compiled:  vprint >>> [void,i64*,i64,i64]*
Compiled:  vprint >>> [void,i64*,i64]*
Compiled:  vprint >>> [void,float*,i64,i64]*
Compiled:  vprint >>> [void,float*,i64]*
Compiled:  vprint >>> [void,double*,i64,i64]*
Compiled:  vprint >>> [void,double*,i64]*
Compiled:  vcopy_unpack >>> [void,float*,float*,i64,i64,i64]*
Compiled:  vcopy_unpack >>> [void,double*,double*,i64,i64,i64]*
Compiled:  vcopy_pack >>> [void,float*,float*,i64,i64,i64]*
Compiled:  vcopy_pack >>> [void,double*,double*,i64,i64,i64]*
Compiled:  vcopy >>> [void,double*,i64,double*]*
Compiled:  vcopy >>> [void,float*,i64,float*]*
Compiled:  vcopy >>> [void,i64*,i64,i64*]*
Compiled:  vcopy >>> [void,i32*,i64,i32*]*
Compiled:  vnormalise >>> [void,float*,i64,float*]*
Compiled:  vnormalise >>> [void,double*,i64,double*]*
Compiled:  vvdot >>> [float,float*,float*,i64]*
Compiled:  vvdot >>> [double,double*,double*,i64]*
Compiled:  vvcross >>> [void,float*,float*,float*]*
Compiled:  vvcross >>> [void,double*,double*,double*]*
Compiled:  vsmul >>> [void,float*,float,i64,float*]*
Compiled:  vsmul >>> [void,double*,double,i64,double*]*
Compiled:  vsdiv >>> [void,float*,float,i64,float*]*
Compiled:  vsdiv >>> [void,double*,double,i64,double*]*
Compiled:  vvsum >>> [void,float*,float*,i64,float*]*
Compiled:  vvsum >>> [void,double*,double*,i64,double*]*
Compiled:  vvsub >>> [void,float*,float*,i64,float*]*
Compiled:  vvsub >>> [void,double*,double*,i64,double*]*
Compiled:  vvmul >>> [void,float*,float*,i64,float*]*
Compiled:  vvmul >>> [void,double*,double*,i64,double*]*
Compiled:  vmag >>> [float,float*,i64]*
Compiled:  vmag >>> [double,double*,i64]*
Compiled:  vaquat >>> [void,float*,float,float*]*
Compiled:  vaquat >>> [void,double*,double,double*]*
XtmMacro:  colmaj_idx_2D >>> 
XtmMacro:  rowmaj_idx_2D >>> 
Compiled:  mprint >>> [void,float*,i64,i64]*
Compiled:  mprint >>> [void,double*,i64,i64]*
Compiled:  mprint >>> [void,i32*,i64,i64]*
Compiled:  mprint >>> [void,i64*,i64,i64]*
Compiled:  mmmul >>> [float*,float*,i64,i64,float*,i64,i64,float*]*
Compiled:  mmmul >>> [double*,double*,i64,i64,double*,i64,i64,double*]*
Compiled:  mmmul >>> [i32*,i32*,i64,i64,i32*,i64,i64,i32*]*
Compiled:  mmmul >>> [i64*,i64*,i64,i64,i64*,i64,i64,i64*]*
Compiled:  mmmul >>> [float*,float*,float*,float*]*
Compiled:  mtrans >>> [float*,float*,i64,i64,float*]*
Compiled:  mtranspose >>> [double*,double*,i64,i64,double*]*
Compiled:  mdeterminant >>> [float,float*,i64]*
Compiled:  mdeterminant >>> [double,double*,i64]*
Compiled:  minverse >>> [void,float*,i64,float*]*
Compiled:  minverse >>> [void,double*,i64,double*]*
Compiled:  mcopy >>> [void,float*,i64,i64,float*]*
Compiled:  mcopy >>> [void,double*,i64,i64,double*]*
Compiled:  varotate >>> [float*,float*,float,float*]*
Compiled:  varotate >>> [double*,double*,double,double*]*
Compiled:  vquicksort >>> [void,double*,i64,i64]*
Compiled:  vquicksort >>> [void,float*,i64,i64]*
Compiled:  vquicksort >>> [void,i64*,i64,i64]*
Compiled:  vquicksort >>> [void,i32*,i64,i64]*
Compiled:  vquicksort >>> [void,i16*,i64,i64]*
Compiled:  vquicksort >>> [void,i8*,i64,i64]*
GenrFunc:  vquicksort >>> [void,!a,i64,i64]*
Compiled:  vsort >>> [double*,double*,i64]*
Compiled:  vsort >>> [float*,float*,i64]*
Compiled:  vsort >>> [i64*,i64*,i64]*
Compiled:  vsort >>> [i32*,i32*,i64]*
Compiled:  vsort >>> [i16*,i16*,i64]*
Compiled:  vsort >>> [i8*,i8*,i64]*
Compiled:  vmedian >>> [float,float*,i64]*
Compiled:  vmedian >>> [double,double*,i64]*
Compiled:  vmode >>> [float,float*,i64]*
Compiled:  vmode >>> [double,double*,i64]*
Compiled:  vsphere >>> [void,float*,i64,i64,float*,float*]*
DataType:  Complexd >>> <double,double>
Compiled:  Cpxd >>> [Complexd,double,double]*
Compiled:  print >>> [void,Complexd]*
Compiled:  print >>> [void,Complexd*]*
Compiled:  toString >>> [String*,Complexd]*
Compiled:  toString >>> [String*,Complexd*]*
Compiled:  xtm_addition >>> [Complexd,Complexd,Complexd]*
Compiled:  xtm_addition >>> [Complexd,Complexd,double]*
Compiled:  xtm_addition >>> [Complexd,double,Complexd]*
Compiled:  Complex_addition_bybuf >>> [void,Complexd*,Complexd*,Complexd*,i64]*
Compiled:  xtm_subtraction >>> [Complexd,Complexd,Complexd]*
Compiled:  xtm_subtraction >>> [Complexd,Complexd,double]*
Compiled:  xtm_subtraction >>> [Complexd,double,Complexd]*
Compiled:  Complex_subtraction_bybuf >>> [void,Complexd*,Complexd*,Complexd*,i64]*
Compiled:  xtm_multiplication >>> [Complexd,Complexd,Complexd]*
Compiled:  xtm_multiplication >>> [Complexd,Complexd,double]*
Compiled:  xtm_multiplication >>> [Complexd,double,Complexd]*
Compiled:  Complex_multiplication_bybuf >>> [void,Complexd*,Complexd*,Complexd*,i64]*
Compiled:  xtm_division >>> [Complexd,Complexd,Complexd]*
Compiled:  xtm_division >>> [Complexd,Complexd,double]*
Compiled:  xtm_division >>> [Complexd,double,Complexd]*
Compiled:  Complex_division_bybuf >>> [void,Complexd*,Complexd*,Complexd*,i64]*
Compiled:  Complex_mag >>> [double,Complexd]*
Compiled:  Complex_phase >>> [double,Complexd]*
Compiled:  Complex_conj >>> [Complexd,Complexd]*
Compiled:  cart_to_pol >>> [Complexd,Complexd]*
Compiled:  cart_to_pol >>> [void,Complexd*,i64]*
Compiled:  pol_to_cart >>> [Complexd,Complexd]*
Compiled:  pol_to_cart >>> [void,Complexd*,i64]*
DataType:  Complexf >>> <float,float>
Compiled:  Cpxf >>> [Complexf,float,float]*
Compiled:  print >>> [void,Complexf]*
Compiled:  print >>> [void,Complexf*]*
Compiled:  toString >>> [String*,Complexf]*
Compiled:  toString >>> [String*,Complexf*]*
Compiled:  xtm_addition >>> [Complexf,Complexf,Complexf]*
Compiled:  xtm_addition >>> [Complexf,Complexf,float]*
Compiled:  xtm_addition >>> [Complexf,float,Complexf]*
Compiled:  Complex_addition_bybuf >>> [void,Complexf*,Complexf*,Complexf*,i64]*
Compiled:  xtm_subtraction >>> [Complexf,Complexf,Complexf]*
Compiled:  xtm_subtraction >>> [Complexf,Complexf,float]*
Compiled:  xtm_subtraction >>> [Complexf,float,Complexf]*
Compiled:  Complex_subtraction_bybuf >>> [void,Complexf*,Complexf*,Complexf*,i64]*
Compiled:  xtm_multiplication >>> [Complexf,Complexf,Complexf]*
Compiled:  xtm_multiplication >>> [Complexf,Complexf,float]*
Compiled:  xtm_multiplication >>> [Complexf,float,Complexf]*
Compiled:  Complex_multiplication_bybuf >>> [void,Complexf*,Complexf*,Complexf*,i64]*
Compiled:  xtm_division >>> [Complexf,Complexf,Complexf]*
Compiled:  xtm_division >>> [Complexf,Complexf,float]*
Compiled:  xtm_division >>> [Complexf,float,Complexf]*
Compiled:  Complex_division_bybuf >>> [void,Complexf*,Complexf*,Complexf*,i64]*
Compiled:  Complex_mag >>> [float,Complexf]*
Compiled:  Complex_phase >>> [float,Complexf]*
Compiled:  Complex_conj >>> [Complexf,Complexf]*
Compiled:  cart_to_pol >>> [Complexf,Complexf]*
Compiled:  cart_to_pol >>> [void,Complexf*,i64]*
Compiled:  pol_to_cart >>> [Complexf,Complexf]*
Compiled:  pol_to_cart >>> [void,Complexf*,i64]*
Compiled:  Complex_bufferize >>> [void,float*,float*,Complexf*,i64]*
Compiled:  Complex_bufferize >>> [void,float*,Complexf*,i64]*
Compiled:  Complex_bufferize >>> [void,double*,double*,Complexd*,i64]*
Compiled:  Complex_bufferize >>> [void,double*,Complexd*,i64]*
Compiled:  Complex_unbufferize >>> [void,Complexf*,float*,float*,i64]*
Compiled:  Complex_unbufferize >>> [void,Complexf*,float*,i64]*
Compiled:  Complex_unbufferize >>> [void,Complexd*,double*,double*,i64]*
Compiled:  Complex_unbufferize >>> [void,Complexd*,double*,i64]*
DataType:  HistBin >>> <float,float>
Compiled:  print >>> [void,HistBin*]*
Compiled:  toString >>> [String*,HistBin*]*
Compiled:  histogram >>> [HistBin*,HistBin*,float*,i64,float,float,i64]*
Compiled:  histogram >>> [HistBin*,HistBin*,float*,i64,i64]*
Compiled:  dft >>> [void,double*,Complexd*,i64]*
Compiled:  idft >>> [void,Complexd*,double*,i64]*
Compiled:  gaussr >>> [double]*
Compiled:  gaussr >>> [float]*
Compiled:  hanning >>> [double,double]*
Compiled:  window_hanning >>> [void,double*,i64]*
Compiled:  window_hanning >>> [void,float*,i64]*
Compiled:  hamming >>> [double,double]*
Compiled:  window_hamming >>> [void,double*,i64]*
Compiled:  window_hamming >>> [void,float*,i64]*
Compiled:  djb2 >>> [i64,i8*]*
Compiled:  sdbm >>> [i64,i8*]*
Compiled:  ndiff >>> [double,[double,double]*,double]*
Compiled:  ndiff >>> [double,[double,double]*,double,double]*
Compiled:  ndifferentiate >>> [double,[double,double]*,double]*
Compiled:  ndiff_extrapolated >>> [double,[double,double]*,double,double]*
Compiled:  ndiff2 >>> [double,[double,double]*,double]*
Compiled:  ndiff2 >>> [double,[double,double]*,double,double]*
Compiled:  nintegrate >>> [double,[double,double]*,double,double,i64]*
Compiled:  nintegrate >>> [double,[double,double]*,double,double]*
Compiled:  fade >>> [double,double]*
Compiled:  grad >>> [double,i64,double,double,double]*
Compiled:  lerp >>> [double,double,double,double]*
Compiled:  perlin >>> [double,double,double,double]*
fpesari commented 4 years ago

Hello,

apologies if I have not responded for a long time but I waited until I switched to openSUSE Leap 15.2 to see if things would change and they did - Extempore now properly works, I tested it with Emacs.

I'm keeping the issue open because it would be nice for all packagers if extempore could be easily built without the Internet.

This means not just switching to submodules - although that would make our jobs easier already - but also providing releases which already include the downloaded submodules.

I will start making the openSUSE package soon in any case.

benswift commented 4 years ago

Ok, thanks for the update. As I mentioned above, I'm unlikely to have time to refactor the build stuff in the forseeable future, but if anyone else wants to have a crack at it then PRs would be welcome - and we could discuss them here first.