-   Linux - Software (
-   -   Is it ok to build latest cmake dir in personal directory? (

agentchange 08-24-2008 04:28 PM

Is it ok to build latest cmake dir in personal directory?
Really easy question, but running it through your distros package manager just seems so much more right.

agentchange 08-24-2008 06:51 PM

Ok, well I tried transplanting cmake from personal into usr/bin/ and this started to work, but then it warned me that I should have all of cmake working in root, which is what I expected. I don't think that moving the modules directory into usr/bin is the only thing that I will need to do to get all of cmake to work.

Can someone help me with a way to build cmake in my program dirs independently of my package manager?

syg00 08-24-2008 06:59 PM

What does the Readme.txt say ?. Typically you would do the compile as a user, then something like "make install" as root to get the binaries into the "correct" location.

agentchange 08-24-2008 07:31 PM

According to the cmake website, I can probably do one of two things.

1. Download an .sh file, run it with /bin/sh and follow the instructions. (What kind of command line would you use to run this and what directory would the .sh file have to be in?)

2. Untare a regular tar file, but in which directory, as it won't work in the personal directory and the untarred package gives you four parent directories - bin, share, man, and doc, of which I know that one of the subdirectories also goes in usr/bin.

As far as the readme is concerned, I'll give you a taste of everything it says. It only talks about making files, not about building qmake.


Note to authors of FindXXX.cmake files

We would like all FindXXX.cmake files to produce consistent variable names.

Please use the following consistent variable names for general use.

XXX_INCLUDE_DIRS The final set of include directories listed in one variable for use by client code. This should not be a cache entry.
XXX_LIBRARIES The libraries to link against to use XXX. These should include full paths. This should not be a cache entry.
XXX_DEFINITIONS Definitions to use when compiling code that uses XXX. This really shouldn't include options such as (-DHAS_JPEG)that a client source-code file uses to decide whether to #include <jpeg.h>
XXX_EXECUTABLE Where to find the XXX tool.
XXX_YYY_EXECUTABLE Where to find the YYY tool that comes with XXX.
XXX_LIBRARY_DIRS Optionally, the final set of library directories listed in one variable for use by client code. This should not be a cache entry.
XXX_ROOT_DIR Where to find the base directory of XXX.
XXX_VERSION_YY Expect Version YY if true. Make sure at most one of these is ever true.
XXX_WRAP_YY If False, do not try to use the relevent CMake wrapping command.
XXX_YY_FOUND If False, optional YY part of XXX sytem is not available.
XXX_FOUND Set to false, or undefined, if we haven't found, or don't want to use XXX.
XXX_RUNTIME_LIBRARY_DIRS Optionally, the runtime library search path for use when running an executable linked to shared libraries.
The list should be used by user code to create the PATH on windows or LD_LIBRARY_PATH on unix.
This should not be a cache entry.
XXX_VERSION_STRING A human-readable string containing the version of the package found, if any.
XXX_VERSION_MAJOR The major version of the package found, if any.
XXX_VERSION_MINOR The minor version of the package found, if any.
XXX_VERSION_PATCH The patch version of the package found, if any.

You do not have to provide all of the above variables. You should provide XXX_FOUND under most circumstances. If XXX is a library, then XXX_LIBRARIES, should also be defined, and XXX_INCLUDE_DIRS should usually be defined (I guess libm.a might be an exception)

The following names should not usually be used in CMakeLists.txt files, but they may be usefully modified in users' CMake Caches to control stuff.

XXX_LIBRARY Name of XXX Library. A User may set this and XXX_INCLUDE_DIR to ignore to force non-use of XXX.
XXX_YY_LIBRARY Name of YY library that is part of the XXX system. It may or may not be required to use XXX.
XXX_INCLUDE_DIR Where to find xxx.h, etc. (XXX_INCLUDE_PATH was considered bad because a path includes an actual filename.)
XXX_YY_INCLUDE_DIR Where to find xxx_yy.h, etc.

For tidiness's sake, try to keep as many options as possible out of the cache, leaving at least one option which can be used to disable use of the module, or locate a not-found library (e.g. XXX_ROOT_DIR). For the same reason, mark most cache options as advanced.

If you need other commands to do special things then it should still begin with XXX_. This gives a sort of namespace effect and keeps things tidy for the user. You should put comments describing all the exported settings, plus descriptions of any the users can use to control stuff.

You really should also provide backwards compatibility any old settings that were actually in use. Make sure you comment them as deprecated, so that no-one starts using them.

To correctly document a module, create a comment block at the top with # comments. There are three types of comments that can be in the block:

1. The brief description of the module, this is done by:
# - a small description

2. A paragraph of text. This is done with all text that has a single
space between the # and the text. To create a new paragraph, just
put a # with no text on the line.

3. A verbatim line. This is done with two spaces between the # and the text.

For example:

# - This is a cool module
# This module does really cool stuff.
# It can do even more than you think.
# It even needs to paragraphs to tell you about it.
# And it defines the following variables:
# VAR_COOL - this is great isn't it?
# VAR_REALLY_COOL - cool right?

To have a .cmake file in this directory NOT show up in the
modules documentation, you should start the file with a blank

A FindXXX.cmake module will typically be loaded by the command

FIND_PACKAGE(XXX [major[.minor[.patch]]] [EXACT]
[QUIET] [REQUIRED [components...]])

If any version numbers are given to the command it will set the
variable XXX_FIND_VERSION to contain the whole version. The variables
XXX_FIND_VERSION_PATCH will be set to contain the corresponding
portions of the version number. The variable XXX_FIND_VERSION_EXACT
will indicate whether an exact version is requested.
If the find module supports versioning it should locate a version of
the package that is compatible with the version requested. If a
compatible version of the package cannot be found the module should
not report success. The version of the package found should be stored
in the version variables named above.

If the QUIET option is given to the command it will set the variable
XXX_FIND_QUIETLY to true before loading the FindXXX.cmake module. If
this variable is set the module should not complain about not being
able to find the package. If the
REQUIRED option is given to the command it will set the variable
XXX_FIND_REQUIRED to true before loading the FindXXX.cmake module. If
this variable is set the module should issue a FATAL_ERROR if the
package cannot be found. For each package-specific component, say
YYY, listed after the REQUIRED option a variable XXX_FIND_REQUIRED_YYY
to true. The set of components listed will also be specified in a
XXX_FIND_COMPONENTS variable. This can be used by the FindXXX.cmake
module to determine which sub-components of the package must be found.
If neither the QUIET nor REQUIRED options are given then the
FindXXX.cmake module should look for the package and complain without
error if the module is not found.

To get this behaviour you can use the FIND_PACKAGE_HANDLE_STANDARD_ARGS()
macro, as an example see FindJPEG.cmake.

agentchange 08-24-2008 08:19 PM

Ok. I copied the .sh file to the root. Then, I thought this would work when I ran this line.

justin@justin-desktop:~$ sudo chmod +x /

Next thing is that I am supposed to get this shell or something like ./ , but it is not happening. Not sure where to go from here.

agentchange 08-24-2008 08:22 PM

I think that maybe the script is missing the proper "shebang line" at the beginning.

agentchange 08-24-2008 08:30 PM

voila, the shebang line, justin@justin-desktop:~$ sudo sh / , and it ends up putting it in your personal box.

agentchange 08-24-2008 08:36 PM

... but it did not register cmake correctly, so I would need to figure out how to utilize these 4 directories of qmake LOCKED in my personal box for the qmake lmms to work properly.

This is the wall that I am at.


justin@justin-desktop:~/Desktop/LMMS/lmms-0.4.0-beta2/build$ cmake ../ -DCMAKE_INSTALL_PREFIX=/usr
CMake Error: Could not find CMAKE_ROOT !!!
CMake has most likely not been installed correctly.
Modules directory not found in
CMake Error: Error executing cmake::LoadCache(). Aborting.

knudfl 09-06-2008 07:35 AM

The way to use cmake : You will need 2 directories
in your e.g. /home/agentchange/Desktop , or better
make a /home/agentchange/tmp for building stuff.

1) /home/agentchange/tmp/"app-to-build-with-cmake"
2) /home/agentchange/tmp/build-app-xx

Then do 'cd ~tmp/build-app-xx'
and next 'cmake ../app-to-build-with-cmake'
Be aware of the 2 dots telling 'cmake' where to
find "the root" of the application.

A Makefile is generateted, so afterwards just
'make' and when made # 'make install'

Also see examples ( easy to find with the
LQ Search .. cmake .. )

Good Luck !

P.S.: The qmake from Qt4 must be linked to /usr/bin/qmake-qt4
to build lmms-0.4.0-beta2, any reference, PATH=.. etc.
will not work.

All times are GMT -5. The time now is 03:25 AM.