Cabal proposal: user-configurable prefixes (thinking of HSFFIG integration as a preprocessor)
I have been thinking how HSFFIG (Isaac once suggested this) could be integrated with Cabal as a preprocessor. The problem is, external library header file might be located arbitrarily, up to the decision of local system maintainer. I am proposing to extend the "setup configure" command. Currently, one may invoke: setup configure --with-alex=/path/to/alex/installed/bin/alex If however a .cabal file contained stanzas like this: user-prefix-key: mylib user-prefix-default: /usr/local/lib user-prefix-help: The library absolutely necessary to build this package and the cabal program was appropriately modified (I realize this may be hard) then it would become possible to run: setup configure --with-mylib=/path/to/the/location/of/mylib/installed and setup-configure --help would mention --with-mylib as one of the possible configuration options. Then if someone is installing a package requiring this library, and its installation is not done in standard way, it is up to that person to locate the library. Going further, this "mylib" token might become a part of the `extra-lib-dirs' field: extra-lib-dirs: $mylib to be substituted with whatever the user specifies as --with-mylib. And then a new field needs to be added to the .cabal file format: extra-include-dirs: $mylib/../include because a library may be installed anywhere, but relative position of its include files and the library itself is unlikely to vary. This extra-include-dirs will be used by the wrapper for HSFFIG, so that these tokens will be passed to the C preprocessor telling where to look for headers. And then HSFFIG may be fit in the preprocessors framework of Cabal. Suppose we have a file MYLIB.h in the directory where other source files are placed. Then, having defined HSFFIG as a preprocessor for .h suffix (I will have to write a replacement of the HSFFIG main program so that the module name will match the header name without postfixing with "_H"), MYLIB.h will be converted to MYLIB.hs (or more files if the splitter is applied) MYLIB.h will contain then just this #include <mylib.h> assuming that the library's include file is mylib.h. As the extra-include-dirs will be passed properly to the C preprocessor, the library include file will be found correctly. PS I understand, this may be hard to implement and I am ready to help with coding if there is interest in such an integration. -- Dimitry Golubovsky Anywhere on the Web
participants (1)
-
Dimitry Golubovsky