Comments (25)
Thanks for making an issue, I'll investigate this more a little later; the obvious first question to ask is what is exporting the symbols Fl_*
mentioned in the linker error, though the lack of mangling implies that it they are likely symbols from fltk
itself, rather than being symbols exported by fltkhs
.
Also, I just noticed a typo in my description; I meant to write "where fltkhs.nix
contains the output of cabal2nix cabal://fltkhs
", not "where fltk.hs
contains ...".
from fltkhs.
I have a guess as to why the problem is occuring but don't have a fix because I don't know Nix. When building fltkhs
, the C bindings are built separately, their location is added to the library path and copied over manually to the same lib
directory where the Haskell library is installed. Seems like Nix is not able to see the C bindings.
In fact if you want to see what it's doing you can build the C parts by just doing autoconf;./configure;make
at the root of the project. You should see a new directory c-lib
has been added containing the shared and static version of the C bindings and two other directories {shared,static}_object_files
containing the *.o
object files. You can get rid of them with make clean
.
The reasons for the added complexity is that eventually I want to split off the C part into it's own project. I have a number of demos written in C that depend on it.
Is there a way to tell Nix to depend on a library that will be built over the course of the current build?
from fltkhs.
Oh, I see. To be honest, projects that use the default Cabal Setup.hs
are drastically more likely to work out of the box with Nix (and in many other situations, IME). The easiest path forward then would probably be to wait for you to split off the C bindings into a separate project (presumably this would just be a simple autoconf C-only project that ideally produces a pkg-config file that fltkhs can depend on?), and then the Haskell side would just be a normal Cabal project with a simple Setup.hs
.
Fixing the autogenerated Nix package for such a Haskell package would be simple: create a Nix package for the C bindings (call it fltk-c
), and then do self.callPackage ./fltkhs.nix { fltk-c-1 = fltk-c; })
, where fltk-c-1
is the argument autogenerated by cabal2nix
corresponding to the pkg-config dependency given in fltkhs.cabal
file. In theory this separation of packages could be done without any upstream changes, though upstream changes would probably make it more convenient (I'd have to patch Setup.hs
otherwise).
from fltkhs.
Sounds good. I'll leave this issue open as a placeholder.
from fltkhs.
I got something working on the Nix branch. Do you mind pulling and trying? It worked for me with nix-build -A fltkhs
.
from fltkhs.
@deech wow, that was a shockingly quick turnaround on learning Nix :^)
I tried building the code in the Nix branch but it ended up having an absurd number of "multiple definition of ..." errors.
Here's the full build output:
https://gist.github.com/taktoa/367b0877de340d25422bc54628a5c7c6
from fltkhs.
What platform are you on? Guessing OSX?
from fltkhs.
Nope, I'm on NixOS. Would you like me to rerun the build tee
d into a log file?
from fltkhs.
Yes, please. :) I just installed Nix via the curl
command on the website and everything goes into my ~/.nix-profile
I think.
from fltkhs.
Here's the log (27 MiB uncompressed, 1.8 MiB compressed): fltkhs.log.gz
from fltkhs.
Oh wow. Thanks!
from fltkhs.
I'm not sure what's going on but I'm unable to reproduce. I don't have NixOS installed but starting from a fresh install of Ubuntu Mate 15.10 my steps were:
$ curl https://nixos.org/nix/install | sh
$ nix-env -i cabal2nix
$ nix-env -i cabal-install
$ git clone http://github.com/deech/fltkhs -b Nix
$ cd fltkhs
$ nix-build -A fltkhs
from fltkhs.
Interesting, I'll look into it a bit more later.
For reference, though, the Git revision of nixpkgs
I'm building against is 0cb2838d8cd4
. I do have a pretty extensively modified nixpkgs configuration, but since you're passing the config
attribute into import <nixpkgs>
those overrides shouldn't be taking effect.
from fltkhs.
BTW: <nixpkgs>
is just a special kind of path literal in Nix; if you git clone nixpkgs into ./foo
, then you can import ./foo { config = ... }
to build against that version of nixpkgs instead.
from fltkhs.
These may not be fixed in the latest version 0.5.2.5
. Can you try again?
from fltkhs.
@taktoa any update?
from fltkhs.
Any update? I don't see the nix branch, or a nix file I can try out. I'd like to help it get it to work with nix.
from fltkhs.
I have a Nix branch. It hasn't been touched in a while so I brought it up to date with master
. Any help here is appreciated.
from fltkhs.
btw, fltk-config
itself works on NixOS
right?
I can build a simple c examples with nix-shell --pure
, and it probably builds cross-platform anyways, but I just want to check. e.g.
git clone https://github.com/sboosali/fltkhs-reflex-host
cd fltkhs-reflex-host/c
./build.sh
# should open a window
https://github.com/sboosali/fltkhs-reflex-host/blob/master/c/default.nix
from fltkhs.
@sboosali Yup, seems to work on my NixOS 17.09 machine.
from fltkhs.
can you check if the new fltkhs nix file works? I'm new to nix, but I think works for me in a pure shell too (but I can't test now, I think you have to add cabal-install as a build tool during development or something).
git pull && cabal clean # or clone
nix-shell # --pure ?
# defaults flags should work
cabal configure
cabal build
cabal run fltkhs-buttons
from fltkhs.
The C demo works for me, but the fltkhs-buttons
thing just returns without displaying anything.
from fltkhs.
I've separated the C out at https://github.com/TheSandwichMakr/fltkc and https://github.com/TheSandwichMakr/fltkhs
It builds for me using nixpkgs-channel rev 4b649a99d8461c980e7028a693387dc48033c1f7 from the nixos github and ghcHEAD (not that you need the newer packages).
I changed the opengl support to default to true, and the output libraries go into shared/static_object_files. The all
target builds the regular .so rather than the one with the -dyn suffix. fltkhs also links dynamically to fltkc now.
The changes may not be so friendly to other operating systems, but adding an install
target will probably be the main fix, idk.
from fltkhs.
from fltkhs.
A bunch of it is dedicated to bundled builds, generally anything under an if (bundledBuild flags)
(https://github.com/deech/fltkhs/blob/master/Setup.hs#L117).
There is also a fair amount dedicated to Windows.
from fltkhs.
Related Issues (20)
- Return function pointer from `openCallback` so it can be freed. HOT 1
- Crash in FL.eventKey on special key HOT 8
- GL causes c2hs error on Mac due to missing type HOT 4
- after using setIcon on window it doesn't display application HOT 4
- Adding a Scrolled via FLUID generates wrong "scrollNew" call instead of "scrolledNew" HOT 1
- How to enable modern OpenGL? HOT 11
- unable to run basic example under nix HOT 1
- Fltkhs as stack dependency linking error on Windows 10 HOT 1
- install gotchas
- Build error in Setup.hs HOT 2
- Error building bundled fltkhs in custom Setup.hs HOT 1
- fltkhs-fluidtohs generates incorrect module names for nested modules
- addAndGetMenuItem is suprisingly slow HOT 8
- How to call findClicked?
- GHC 8.10.3 linking issue HOT 1
- Syntax error while installing with bundled fltkhs HOT 1
- Build fails with autoconf 2.70 and up HOT 8
- New branch's build artifacts stored in /tmp get erased
- Updating for base-4.14 (ghc 8.10) HOT 2
- cabal-install 3.4.0.0 breaks installation HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fltkhs.