Package Details: octave-hg 4.1.0+21659.ff2347e1df02-1

Git Clone URL: https://aur.archlinux.org/octave-hg.git (read-only)
Package Base: octave-hg
Description: A high-level language, primarily intended for numerical computations.
Upstream URL: http://www.octave.org
Licenses: GPL
Conflicts: octave
Provides: octave=4.1.0
Submitter: haawda
Maintainer: haawda
Last Packager: haawda
Votes: 7
Popularity: 0.002634
First Submitted: 2009-10-01 23:27
Last Updated: 2016-04-29 22:43

Required by (84)

Sources (1)

  • java-slackware.patch

Latest Comments

haawda commented on 2016-02-05 16:15

Strange, /usr/lib/jvm/java-8-openjdk/jre/include should be there, if java-environment is installed. And that group _is_ in the deps.

fusion809 commented on 2016-02-05 01:56

Hi, I just tried to build this package and it returned this error:

g++: error: /usr/lib/jvm/java-8-openjdk/jre/include: No such file or directory
g++: error: /usr/lib/jvm/java-8-openjdk/jre/include: No such file or directory
Makefile:27278: recipe for target 'libinterp/octave-value/ov-class.df' failed
make: *** [libinterp/octave-value/ov-class.df] Error 1

maybe a missing Java-related dependency?

haawda commented on 2015-12-30 19:55

Great fix! Works fine.

I am currently tring to get jit working. If that fails, I will upload your fix only.

flipmess commented on 2015-12-29 22:05

hi
after your change:
- --with-java-libdir=/usr/lib/jvm/`archlinux-java get`/lib/${_arch}/server
+ --with-java-libdir=/usr/lib/jvm/`archlinux-java get`/lib/${_arch}/server:/usr/lib/jvm/`archlinux-java get`/jre/lib/${_arch}/server

i still get:
Build Java interface: no

if i change it to:
--with-java-libdir={/usr/lib/jvm/`archlinux-java get`/lib/${_arch}/server,/usr/lib/jvm/`archlinux-java get`/jre/lib/${_arch}/server}

i get:
Build Java interface: yes

thx for your work.

flipmess commented on 2015-11-28 00:01

it's working since you hardcoded "provides" to 4.1.0. thx.

flipmess commented on 2015-11-25 22:07

when i check the compiled packages they say:
Name : octave-hg
Version : 4.1.0+20749.74cc8ae4e2b0-1
Description : A high-level language, primarily intended for numerical computations.
Architecture : x86_64
URL : http://www.octave.org
Licenses : GPL
Groups : None
Provides : octave=
Depends On : fftw>=3.2.2 curl...

so maybe the problem is with "Provides : octave="

flipmess commented on 2015-11-25 16:57

i get the same error unfortunately. but it compiles fine...

something i've notced; you reverted the change about java libs:
--with-java-libdir=/usr/lib/jvm/`archlinux-java get`/jre/lib/${_arch}/server
back to
--with-java-libdir=/usr/lib/jvm/`archlinux-java get`/lib/${_arch}/server
so it can't find them. at least on my system ^^;

there are also many errors when generating docs when pstoedit is missing.

also due to !makeflags you are inhibiting -j8 for example, but it compiles fine on multiple cpus so the compile time is drastically reduced when using -j8. i don't know about other makeflags.

thx

haawda commented on 2015-11-25 07:31

I removed the + in provides. Does it help?

flipmess commented on 2015-11-25 00:55

ever since there is a "+" in the version i can't update. it's just an observation. shouldn't it be providing ver 4.1.0?

looking for conflicting packages...
error: failed to prepare transaction (could not satisfy dependencies)
:: octave-control: requires octave>=3.8.0
:: octave-general: requires octave>=4.0.0
:: octave-linear-algebra: requires octave>=3.2.3
:: octave-signal: requires octave>=3.8.0
...
ERROR: unable to update

flipmess commented on 2015-08-12 15:30

i think you should remove www. from http://www.octave.org
than it redirects correctly...

flipmess commented on 2015-08-12 15:24

==> Building and installing package
==> Making package: octave-hg r20440.3fc21d7ac11c-1 (Mit Aug 12 17:19:53 CEST 2015)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
==> Extracting sources...
==> Starting pkgver()...
/tmp/yaourt-tmp-flipmess/aur-octave-hg/./PKGBUILD: line 29: cd: /tmp/yaourt-tmp-flipmess/aur-octave-hg/src/octave: No such file or directory
==> Starting build()...
abort: HTTP Error 404: Not Found
==> ERROR: A failure occurred in build().
Aborting...
==> ERROR: Makepkg was unable to build octave-hg.

it's kinda empty..?

haawda commented on 2015-08-11 18:05

Indeed, thanks.

flipmess commented on 2015-08-11 17:11

hi, shouldn't line 63 in PKGBUILD say:
--with-java-libdir=/usr/lib/jvm/`archlinux-java get`/jre/lib/${_arch}/server

instead of

--with-java-libdir=/usr/lib/jvm/`archlinux-java get`/lib/${_arch}/server
?
thx

Repentinus commented on 2015-03-25 18:45

After building and installing this package, I am presented with the following when trying to enable JIT compiling on the command prompt: "octave:1> jit_enable
warning: jit_enable: JIT compiling not available in this version of Octave". What's the cause of this? The package build seems to enable JIT compiling.

haawda commented on 2015-02-01 16:00

Yes, therefore it is a makedependency.

brittyazel commented on 2015-02-01 10:34

I would like to note that mercurial must be installed prior to pulling down octave-hg, or the build will complain and fail out.

haawda commented on 2015-01-16 21:12

Needs suitesparse at runtime now, and I added portaudio as optional dependency.

Xtof commented on 2014-11-24 11:22

Well, I finally managed to build this package. Here is the complete procedure:

> yaourt -S octave-hg
# This intall fails.
# On my computer, two folders are created :
# /tmp/makepkg contain the cloned sources from git and hg
# /tmp/yaourt-tmp-[username]/aur-octave-hg => this is the directory we want to use

# To clone octave-hg manually :
> hg clone http://hg.savannah.gnu.org/hgweb/octave

# then copy the newly created /tmp/octave directory in
# /tmp/yaourt-tmp-[username]/aur-octave-hg

# Run bootstrap
> /tmp/yaourt-tmp-[username]/aur-octave-hg/octave/./bootstrap

# Launch makepkg -i from /tmp/yaourt-tmp-[username]/aur-octave-hg
# Once the package is compiled, simply run the command
> pacman -U octave-hg-xxxxxxxxx-x86_64.pkg.tar.xz

Xtof commented on 2014-11-23 20:59

I'm stuck with the installation of octave-hg due to the already mentioned "can't find /tmp/octave-hg/octave/gnulib-hg" issue.

I'm trying to follow the suggestions from haawda and roadrunner but I'm not sure what to copy from where to where. I tried several things that do not work. I'm not an expert with these manual build things.
The failed install was working in the /tmp/.../aur-octave-hg directory and created ./gnulib and ./octave subdirs.

Can anybody give a more detailed procedure ?
Any help would be really appreciated here :)

dumbojumbo commented on 2014-10-07 16:31

even after adding the texlive-core I get the same error message. I'm not sure what is wrong. For the time-being I have disabled document generation.

On another note has anybody experienced an improvement with JIT enabled.

Thanks again @haawda

haawda commented on 2014-10-06 20:20

--disable-java is correct, because in both cases - id est with java enabled - libjvm.so is not found by the build system.

I added texlive-core to the makedependencies, maybe this fixes your problem with the missing pngs.

dumbojumbo commented on 2014-10-06 15:12

@haawda thanks a lot for the effort. Now, the build is moving past the suitesparse lib problem, however gets stuck up at the documentation building step. I have pasted the build error in the following link:
http://pastebin.com/VUCP4jha
I'm not sure what causes the problem. Any help will be appreciated.

In the PKGBUILD there is both --enable-java and --disable-java options used. Is this valid?

dumbojumbo commented on 2014-10-06 15:10

@haawda thanks a lot for the effort. Now, the build is moving past the suitesparse lib problem, however gets stuck up at the documentation building step. I have pasted the build error in the following link:
http://pastebin.com/VUCP4jha
I'm not sure what causes the problem. Any help will be appreciated.

haawda commented on 2014-10-05 12:22

new makedependency suitesparse-solibs needed.

haawda commented on 2014-08-29 23:05

I encountered build problems with the newest suitesparse version. For now I added --without-umfpack to the configure options.

haawda commented on 2013-12-04 23:11

Provides version 4.1.0 now, some new deps and makedeps needed.

haawda commented on 2013-11-03 15:14

fixed, thanks

StreakyCobra commented on 2013-11-03 12:58

Hi,

I have a problem to build this package with `aura` due to the backslash used to split the `depends` array. So I asked the mailing-list [1] to know if this is an `aura` bug or if the PKGBUILD musts not contain the backslash. It seems that removing [2] it is the right way. Could you remove it? That will make my updates simpler :)

Thanks, Fabien

[1] https://mailman.archlinux.org/pipermail/aur-general/2013-November/025993.html
[2] https://mailman.archlinux.org/pipermail/aur-general/2013-November/025994.html

haawda commented on 2013-08-11 14:36

This is a bug in makepkg. Try roadrunner's suggestion. If that fails, clone the repo maunally, cd ito it and run bootstrap. After that cd into $startdir and run makepkg.

markuman commented on 2013-08-08 23:01

can't find /tmp/octave-hg/octave/gnulib-hg
it failed instandly

roadrunner commented on 2013-06-27 09:03

Thanks for hint. Looks like there is a bug in hg which does only clone the subrepos if there is a working copy in the main repo.

Here is the set of commands that worked for me:

# fails due to bug in hg
makepkg -i
# Make a working copy in the primary repo. This also fetches all subrepos.
cd octave
hg update
cd ..
# Run makepkg again, this time the cloning should work.
makepkg -i

haawda commented on 2013-06-26 18:56

A workaround is to clone the repo manually once, and to use the PKGBUILD after that. The old behavoiur did not work for me anymore with pacman 4.1.1.

roadrunner commented on 2013-06-26 12:34

Hi all,

i have tried building with the current PKGBUILD and get the error message:

==> Extracting sources...
-> Creating working copy of octave hg repo...
updating to branch default
abort: repository octave/gnulib-hg not found!
==> ERROR: Failure while creating working copy of octave hg repo
Aborting...

Looks like the handling of the subrepos (gnulib-hg is a subrepo included the main octave repo) still does not work.

Erik

haawda commented on 2013-06-24 06:26

Some additional modifications for refactored llvm-Code were added.

ShmuelLevine commented on 2013-05-09 15:05

Hi all. After days of struggling with this, I was finally able to successfully build Octave using Intel ICC/IFORT and MKL libraries.

This link claims that he found an improvement in performance of 100x for multiplication of 2 - 5000x5000 matrices, compared to standard gcc with no performance BLAS/LAPACK libraries (such as ATLAS or MKL)
http://qc.uoregon.edu/octave-build-notes.html

I found somewhat similar results, although not quite as drastic---my speedup was ONLY ~50x (that simple benchmark ran in 7.5s for me)

This is my first successful attempt ever trying to do this. This may not be the most graceful modification and there may be some extraneous stuff here. However, it worked successfully for me (finally...) and I thought that I would share it, so that others might benefit as I did.

My PKGBUILD can be found here: http://pastebin.com/8rdBkDtw

There are 3 major changes which I made to the PKGBUILD file:
1) Compiler flags and environment variables
2) Added additional flags to the ./configure script
3) Modified stdio.h under libgnu folder to address an error.

Please also note the following:
- There are some compiler flags that are particular for my CPU. You might need to change -axX -xX -mtune -march flags to suit your system
- I've tried to enable all optimizations. The build was very slow. I have 2 x Xeon 5160 (Dual core, 3.0GHz ) CPUs in this box and it took 1:23:12.17 to build. Removing the -ip -ipo flags would speed this up significantly. I don't know how it would affect the runtime performance
- I have disabled the GUI. Revise the last flag on ./configure line to suit your requirements.


I hope that you all find this helpful. I'd love to hear any feedback.

Shmuel

ShmuelLevine commented on 2013-05-09 04:44

Hi all. After days of struggling with this, I was finally able to successfully build Octave using Intel ICC/IFORT and MKL libraries.

This link claims that he found an improvement in performance of 100x for multiplication of 2 - 5000x5000 matrices, compared to standard gcc with no performance BLAS/LAPACK libraries (such as ATLAS or MKL)
http://qc.uoregon.edu/octave-build-notes.html

I found somewhat similar results, although not quite as drastic---my speedup was ONLY ~50x (that simple benchmark ran in 7.5s for me)

This is my first successful attempt ever trying to do this. This may not be the most graceful modification and there may be some extraneous stuff here. However, it worked successfully for me (finally...) and I thought that I would share it, so that others might benefit as I did.

My PKGBUILD can be found here: http://pastebin.com/8rdBkDtw

There are 3 major changes which I made to the PKGBUILD file:
1) Compiler flags and environment variables
2) Added additional flags to the ./configure script
3) Modified stdio.h under libgnu folder to address an error.

Please also note the following:
- There are some compiler flags that are particular for my CPU. You might need to change -axX -xX -mtune -march flags to suit your system
- I've tried to enable all optimizations. The build was very slow. I have 2 x Xeon 5160 (Dual core, 3.0GHz ) CPUs in this box and it took 1:23:12.17 to build. Removing the -ip -ipo flags would speed this up significantly. I don't know how it would affect the runtime performance
- I have disabled the GUI. Revise the last flag on ./configure line to suit your requirements.


I hope that you all find this helpful.

haawda commented on 2013-04-30 17:48

Works with texinfo 5.0 now.

haawda commented on 2013-04-24 20:50

Thanks, Gringo. I uploaded your PKGBUILD, works fine.

Gringo commented on 2013-04-23 19:27

I found a workaround for the problem. configure finds both qt and qt4 header directories in /usr/include. It tries to use the newest release, but for some reason it fails to do so for the tools uic and moc. uic compiles the *.ui files which have version 4.0 in them, which indicates that they're configured for qt4. This is probably what went wrong.

The variables MOC and UIC can be initialized while issuing configure command. This will set the tools appropriately.

The fix is as follows:
- Add MOC=moc-qt4 and UIC=uic-qt4 to the configure command.
- Add qt4 as an optional dependency

I also added $pkgver to the version information in pkgver(), which will prevent tools such as yaourt to indicate that there is a new version.

The package builds correctly with the mentioned qt5 packages installed. The updated PKGBUILD can be found here: http://pastebin.com/mrt7L1LC

Gringo commented on 2013-04-23 19:24

I found a workaround for the problem. configure finds both qt and qt4 header directories in /usr/include. It tries to use the newest release, but for some reason it fails to do so for the tools uic and moc. uic compiles the *.ui files which have version 4.0 in them, which indicates that they're configured for qt4. This is probably what went wrong.

The variables MOC and UIC can be initialized while issuing configure command. This will set the tools appropriately.

The fix is as follows:
- Add MOC=moc-qt4 and UIC=uic-qt4 to the configure command.
- Add qt4 as an optional dependency

I also added $pkgver to the version information in pkgver(), which will prevent tools such as yaourt to indicate that there is a new version.

The package builds correctly with the mentioned qt5 packages installed. The updated PKGBUILD can be found here: http://pastebin.com/SFUtGzGS

haawda commented on 2013-04-14 09:57

I have pacman -Qis qt5
local/qt5-base 5.0.2-1 (qt qt5)
A cross-platform application and UI framework
local/qt5-declarative 5.0.2-1 (qt qt5)
A cross-platform application and UI framework (QtQml, QtQuick)
local/qt5-jsbackend 5.0.2-1 (qt qt5)
A cross-platform application and UI framework (QtV8)
local/qt5-webkit 5.0.2-1 (qt qt5)
A cross-platform application and UI framework (QtWebKit)
local/qt5-xmlpatterns 5.0.2-1 (qt qt5)
A cross-platform application and UI framework (QtXmlPatterns)

Error message:

In file included from src/settings-dialog.cc:29:0:
src/ui-settings-dialog.h:13:29: fatal error: QtWidgets/QAction: No such file or directory

The file ui-settings-dialog.h is auto-generated during the build process. QAction is located under QtGui, not under QtWidgets.

Gringo commented on 2013-04-13 19:24

@Stefan: what kind of problems? What errors did you get when building? I'm also interested in the qt5 application which caused the errors, so I can replicate the problems. I only have qt5-base installed, which doesn't seem to cause any issues.

I haven't been able to try octave extensively, but I'm a big fan of MATLAB. I really want to get the package right, so many people can use and maybe contribute to it (that's my plan). The new GUI is awesome! :D

haawda commented on 2013-04-13 17:52

Gringo: Thank you for your efforts. I changed your PKGBUILD a bt and uploded it here.

There still are issues: I had to deinstall all QT5-related packages to build octave-hg.

Gringo commented on 2013-04-11 17:09

Fixed the ld.so.conf.d problem with the version. The version is now retrieved from the executable itself using octave --version from which the actual number is stripped. This is the same number as the name of the directory under /usr/lib/octave, meaning that this package should work if the version is updated.

The latest PKGBUILD, now fully working, can be found here: http://pastebin.com/xzKYdNey

Gringo commented on 2013-04-11 13:47

The 'make' part of the PKGBUILD was OK, but there's another (probably last) error in the package() part: the directory is changed to $_hgrepo, but Octave was build in $_hgoctave-build, so 'make install' fails (the install rules aren't there yet). I fixed the PKGBUILD accordingly, which can be found here: http://pastebin.com/SukqLFEg

It might be that I will add another fix shortly, since I don't think the last line works either: echo "/usr/lib/${pkgname}/${pkgver}" > "${pkgdir}/etc/ld.so.conf.d/${pkgname}.conf". $pkgver is some Mercurial commit id, but not the actual version, which should be 3.7.2+ I think.. Will have to wait for the current build to finish.

Gringo commented on 2013-04-11 10:19

I modified the PKGBUILD to work as described below. I also changed the pkgver() part, which now gets the version without first downloading from the repo. That part is not pretty, but it works.
The remaining part is unchanged. I tested the PKGBUILD and it seems to work nicely.

The updated file can be found on PasteBin: http://pastebin.com/wjNTZNzk

Gringo commented on 2013-04-11 09:32

One option would be to avoid setting the Mercurial repository as a source and handle the cloning manually, by using "hg clone http://www.octave.org/hg/octave".

I did a quick search on AUR and found an example in the em8300 package, which might come in handy: https://aur.archlinux.org/packages/em8300-hg/

haawda commented on 2013-04-10 21:19

Yes, hg clone creates subrepos, and makepkg seems not to handle that correctly. I do not know why this happens or how to avoid it.

Gringo commented on 2013-04-10 18:15

I'm getting the error message below. I can get the sources and compile succesfully if I run: hg clone http://www.octave.org/hg/octave .

==> Extracting sources...
-> Creating working copy of octave hg repo...
updating to branch default
abort: repository /tmp/yaourt-tmp-benny/aur-octave-hg/octave/gnulib-hg not found!
==> ERROR: Failure while creating working copy of octave hg repo
Aborting...
==> ERROR: Makepkg was unable to build octave-hg.
==> Restart building octave-hg ? [y/N]

haawda commented on 2013-04-09 21:37

depends on texinfo-legacy now, re-enabled docs.

haawda commented on 2013-04-06 21:49

pacman-4.1-ready PKGBUILD.

haawda commented on 2013-02-23 23:40

Disabled docs for now. see https://savannah.gnu.org/bugs/index.php?38392

haawda commented on 2013-01-16 04:09

added a check function

haawda commented on 2013-01-04 12:51

The git repo has been replaced by a mercurial repo upstream. Right now I have unrelated build problems I try to fix.

haawda commented on 2012-12-23 08:23

Same problems here. I try your workaround.

hanckmann commented on 2012-12-22 19:56

I solved the issue below by doing:
If you have trouble with the git:// url (e.g. due to firewall restrictions), try adding the following to your ~/.hgrc to use an alternative http:// url:

[subpaths]
git://git.sv.gnu.org/gnulib = http://git.savannah.gnu.org/r/gnulib.git

(source: http://www.gnu.org/software/octave/get-involved.html)

hanckmann commented on 2012-12-22 19:45

I end up with this problem:
===
added 15836 changesets with 101524 changes to 11743 files (+1 heads)
updating to branch default
cloning subrepo gnulib from git://git.sv.gnu.org/gnulib
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
abort: git clone error 128 in gnulib
===
Not sure how to fix it... since the git repo is not in the PKGBUILD.
Any ideas?

haawda commented on 2012-12-18 20:32

Sorry, java odes not work yet, disabled again.

haawda commented on 2012-12-18 13:23

Enabled java, adjusted install file.

haawda commented on 2012-11-03 21:47

Enabled jit.

haawda commented on 2012-10-18 17:46

Added qhull as dependency - quite cheap, but useful.

haawda commented on 2012-09-19 14:40

autogen.sh was renamed to bootstrap.

haawda commented on 2012-09-19 13:02

Building docs works again, autogen.sh was renamed to bootstrap.

haawda commented on 2012-09-18 20:53

Disabling doc creation for now because it does not work.

Samsagax commented on 2012-09-05 15:27

Could you pleas add a version number to the "provides" variable? some packages need it.

provides=('octave=3.7.0')

Samsagax commented on 2012-09-04 13:08

You need to add:

--with-umfpack="-lumfpack -lsuitesparseconfig -lrt"

To the "configure" step as per this bug: http://savannah.gnu.org/bugs/?func=detailitem&item_id=37031

haawda commented on 2012-08-31 17:54

Removed ugly sed-workaround, not longer needed.

herraiz commented on 2012-08-17 17:48

Yes, the patch is probably obsolete. Also, with the merge of the gui branch into the default octave branch, I think this package does not make sense anymore, the gui should be included in the octave-hg package. I am going to disown it.

haawda commented on 2012-08-17 17:19

The patch may be obsolete.

patching file gui/media/chat.xpm
patching file gui/media/help_index.xpm
patching file gui/media/jabber_protocol.xpm
patching file gui/media/logo.xpm
patching file gui/media/terminal.xpm
can't find file to patch at input line 1787
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff -r c2ca3b71cd7c gui/src/FilesDockWidget.cpp
|--- a/gui/src/FilesDockWidget.cpp Mon May 07 16:02:31 2012 -0400
|+++ b/gui/src/FilesDockWidget.cpp Wed May 16 15:15:44 2012 -0700
--------------------------
File to patch:

BTW the octave maintainers decided to make the gui binary the default.

AElfwine commented on 2012-07-16 23:53

I had to replace line
./autogen.sh --bootstrap-sync --no-git --gnulib-srcdir=$srcdir/gnulib
with
./autogen.sh --bootstrap-sync --no-git --gnulib-srcdir=$srcdir/octave-build/gnulib

in PKDBUILD otherwise bootstrap is unable to proceed.

haawda commented on 2012-07-10 17:58

The explicit download of the gnulib stuff is not needed, because the sources are pulled by the autogen.sh script. But I had to add --bootstrap-sync as option.

haawda commented on 2012-02-04 19:27

This PKGBUILD does not work with the newest mercurial from the extra repo. Blame upstrem for this. See http://selenic.com/hg/rev/093b75c7b44b.

haawda commented on 2012-02-04 19:25

This PKGBUILD does not work with the newest mercurial from the extra repo. Blame upstrem for this. See http://selenic.com/hg/rev/093b75c7b44b.

haawda commented on 2011-11-22 17:46

There was a blank in $pkgrel, fixed now.

haawda commented on 2011-07-03 10:27

Fix for curl found. Namcap tells me to reintroduce curl and drop qhull.

haawda commented on 2011-07-02 19:11

added pcre as dependencies and --without-curl to the configure flags. The build fails without that option. I filed a bug report upstream. http://savannah.gnu.org/bugs/index.php?33697

haawda commented on 2011-07-02 19:09

added pcre as dependencies and --without-curl to the configure flags. The build fails without that option. I filed a bug report upstream.

haawda commented on 2011-02-20 14:06

Added gperf to the makedepends. Why is it needed at runtime?

qs9rx commented on 2011-02-20 11:26

Thanks a lot!
Also depends on gperf.

haawda commented on 2011-02-19 15:30

PKGBUILD rewritten: It now downloads gnulib files itself, and does not let the bottstrap script do so. This will save bandwidth and time.

haawda commented on 2011-02-10 18:30

The PKGBUILD calls autogen.sh instead of bootstrap, as advised by upstream.

haawda commented on 2011-01-30 20:29

use makepkg --holdver to build this. the newest hg-repo seems to be broken.

haawda commented on 2011-01-24 02:54

Small change in configure.patch to make compilation possible.