Problems with install-includes

Hi, In my project I am using C include/header files that are hierarchically nested into folders. These header files are used to compile the Haskell package and everything is fine with the compilation process. I want these include files also to be installed with the package. From the online documentation of Cabal I learned that there exists specific field for this purpose called install-includes. However, it does not work when include files are hierarchically nested into folders. Here is relevant part of the cabal file I am using. include-dirs: cbits/sundials/include install-includes: nvector/nvector_serial.h when I am issuing cabal install command I am getting the following error: cabal: Error: some packages failed to install: Hydra-0.1 failed during the final install step. The exception was: /home/ggg/.cabal/lib/Hydra-0.1/ghc-6.10.1/include/nvector: copyFile: does not exist (No such file or directory) It seems to me that cabal forgets to create parent directories for folder nested include files. For not-nested include files install-includes filed works fine. The Cabal version I am using is 1.6.0.1. The cabal-install version I am using is 0.6.0 Currently, as a workaround I am using data-files field to install include files. However, I would like to see this issue fixed (I assume it is a bug). Cheers, George -- George Giorgidze http://www.cs.nott.ac.uk/~ggg/

On Wed, 2009-01-21 at 18:02 +0100, George Giorgidze wrote:
Hi,
In my project I am using C include/header files that are hierarchically nested into folders. These header files are used to compile the Haskell package and everything is fine with the compilation process. I want these include files also to be installed with the package. From the online documentation of Cabal I learned that there exists specific field for this purpose called install-includes. However, it does not work when include files are hierarchically nested into folders. Here is relevant part of the cabal file I am using.
include-dirs: cbits/sundials/include install-includes: nvector/nvector_serial.h
when I am issuing cabal install command I am getting the following error:
cabal: Error: some packages failed to install: Hydra-0.1 failed during the final install step. The exception was: /home/ggg/.cabal/lib/Hydra-0.1/ghc-6.10.1/include/nvector: copyFile: does not exist (No such file or directory)
It seems to me that cabal forgets to create parent directories for folder nested include files. For not-nested include files install-includes filed works fine.
The Cabal version I am using is 1.6.0.1. The cabal-install version I am using is 0.6.0
Currently, as a workaround I am using data-files field to install include files. However, I would like to see this issue fixed (I assume it is a bug).
Yes it's a bug. Thanks. The problem is the code in Distribution/Simple/Install.hs in the function installIncludeFiles. You'll notice that it creates the toplevel target 'include' directory, but you'll also notice that the directory component of each .h file is not created: unless (null incs) $ do createDirectoryIfMissingVerbose verbosity True incdir sequence_ [ copyFileVerbose verbosity path (incdir > f) | (f,path) <- incs ] If fixed a similar bug in the data files code recently. This code is unfortunately not very well factored so I missed the equivalent issue in the includes. I've pushed a patch to Cabal HEAD. Could you confirm that it works? If so I'll push it to the 1.6.x branch which means it'll make it into the upcoming 1.6.0.2 release. Duncan

Hi Duncan,
Thanks for fixing the bug. I confirm that HEAD branch works as expected.
It is nice that this change will be incorporated into 1.6.0.2 release.
Cheers, George
2009/1/22 Duncan Coutts
On Wed, 2009-01-21 at 18:02 +0100, George Giorgidze wrote:
Hi,
In my project I am using C include/header files that are hierarchically nested into folders. These header files are used to compile the Haskell package and everything is fine with the compilation process. I want these include files also to be installed with the package. From the online documentation of Cabal I learned that there exists specific field for this purpose called install-includes. However, it does not work when include files are hierarchically nested into folders. Here is relevant part of the cabal file I am using.
include-dirs: cbits/sundials/include install-includes: nvector/nvector_serial.h
when I am issuing cabal install command I am getting the following error:
cabal: Error: some packages failed to install: Hydra-0.1 failed during the final install step. The exception was: /home/ggg/.cabal/lib/Hydra-0.1/ghc-6.10.1/include/nvector: copyFile: does not exist (No such file or directory)
It seems to me that cabal forgets to create parent directories for folder nested include files. For not-nested include files install-includes filed works fine.
The Cabal version I am using is 1.6.0.1. The cabal-install version I am using is 0.6.0
Currently, as a workaround I am using data-files field to install include files. However, I would like to see this issue fixed (I assume it is a bug).
Yes it's a bug. Thanks.
The problem is the code in Distribution/Simple/Install.hs in the function installIncludeFiles. You'll notice that it creates the toplevel target 'include' directory, but you'll also notice that the directory component of each .h file is not created:
unless (null incs) $ do createDirectoryIfMissingVerbose verbosity True incdir sequence_ [ copyFileVerbose verbosity path (incdir > f) | (f,path) <- incs ]
If fixed a similar bug in the data files code recently. This code is unfortunately not very well factored so I missed the equivalent issue in the includes.
I've pushed a patch to Cabal HEAD. Could you confirm that it works? If so I'll push it to the 1.6.x branch which means it'll make it into the upcoming 1.6.0.2 release.
Duncan
-- George Giorgidze http://www.cs.nott.ac.uk/~ggg/
participants (2)
-
Duncan Coutts
-
George Giorgidze