git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kstreamripper@1239912 283d02a7-25f6-0310-bc7c-ecb5cbfe19dav3.5.13-sru
commit
2e77c0b4ce
@ -0,0 +1,2 @@
|
|||||||
|
Michael Goettsche <mail@tuxipuxi.org>
|
||||||
|
William Entriken <william.entriken@villanova.edu>
|
@ -0,0 +1,234 @@
|
|||||||
|
# Doxyfile 1.3.3-Gideon
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# Project related configuration options
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
PROJECT_NAME = kstreamripper.kdevelop
|
||||||
|
PROJECT_NUMBER = 0.1
|
||||||
|
OUTPUT_DIRECTORY =
|
||||||
|
OUTPUT_LANGUAGE = English
|
||||||
|
USE_WINDOWS_ENCODING = NO
|
||||||
|
BRIEF_MEMBER_DESC = YES
|
||||||
|
REPEAT_BRIEF = YES
|
||||||
|
ALWAYS_DETAILED_SEC = NO
|
||||||
|
INLINE_INHERITED_MEMB = NO
|
||||||
|
FULL_PATH_NAMES = NO
|
||||||
|
STRIP_FROM_PATH =
|
||||||
|
SHORT_NAMES = NO
|
||||||
|
JAVADOC_AUTOBRIEF = NO
|
||||||
|
MULTILINE_CPP_IS_BRIEF = NO
|
||||||
|
DETAILS_AT_TOP = NO
|
||||||
|
INHERIT_DOCS = YES
|
||||||
|
DISTRIBUTE_GROUP_DOC = NO
|
||||||
|
TAB_SIZE = 8
|
||||||
|
ALIASES =
|
||||||
|
OPTIMIZE_OUTPUT_FOR_C = NO
|
||||||
|
OPTIMIZE_OUTPUT_JAVA = NO
|
||||||
|
SUBGROUPING = YES
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# Build related configuration options
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
EXTRACT_ALL = NO
|
||||||
|
EXTRACT_PRIVATE = NO
|
||||||
|
EXTRACT_STATIC = NO
|
||||||
|
EXTRACT_LOCAL_CLASSES = YES
|
||||||
|
HIDE_UNDOC_MEMBERS = NO
|
||||||
|
HIDE_UNDOC_CLASSES = NO
|
||||||
|
HIDE_FRIEND_COMPOUNDS = NO
|
||||||
|
HIDE_IN_BODY_DOCS = NO
|
||||||
|
INTERNAL_DOCS = NO
|
||||||
|
CASE_SENSE_NAMES = YES
|
||||||
|
HIDE_SCOPE_NAMES = NO
|
||||||
|
SHOW_INCLUDE_FILES = YES
|
||||||
|
INLINE_INFO = YES
|
||||||
|
SORT_MEMBER_DOCS = YES
|
||||||
|
GENERATE_TODOLIST = YES
|
||||||
|
GENERATE_TESTLIST = YES
|
||||||
|
GENERATE_BUGLIST = YES
|
||||||
|
GENERATE_DEPRECATEDLIST= YES
|
||||||
|
ENABLED_SECTIONS =
|
||||||
|
MAX_INITIALIZER_LINES = 30
|
||||||
|
SHOW_USED_FILES = YES
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to warning and progress messages
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
QUIET = NO
|
||||||
|
WARNINGS = YES
|
||||||
|
WARN_IF_UNDOCUMENTED = YES
|
||||||
|
WARN_IF_DOC_ERROR = YES
|
||||||
|
WARN_FORMAT = "$file:$line: $text"
|
||||||
|
WARN_LOGFILE =
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the input files
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
INPUT = /home/tuxipuxi/Documents/cpp/kde/kstreamripper
|
||||||
|
FILE_PATTERNS = *.c \
|
||||||
|
*.cc \
|
||||||
|
*.cxx \
|
||||||
|
*.cpp \
|
||||||
|
*.c++ \
|
||||||
|
*.java \
|
||||||
|
*.ii \
|
||||||
|
*.ixx \
|
||||||
|
*.ipp \
|
||||||
|
*.i++ \
|
||||||
|
*.inl \
|
||||||
|
*.h \
|
||||||
|
*.hh \
|
||||||
|
*.hxx \
|
||||||
|
*.hpp \
|
||||||
|
*.h++ \
|
||||||
|
*.idl \
|
||||||
|
*.odl \
|
||||||
|
*.cs \
|
||||||
|
*.php \
|
||||||
|
*.php3 \
|
||||||
|
*.inc \
|
||||||
|
*.C \
|
||||||
|
*.H \
|
||||||
|
*.tlh \
|
||||||
|
*.diff \
|
||||||
|
*.patch \
|
||||||
|
*.moc \
|
||||||
|
*.xpm \
|
||||||
|
*.dox
|
||||||
|
RECURSIVE = yes
|
||||||
|
EXCLUDE =
|
||||||
|
EXCLUDE_SYMLINKS = NO
|
||||||
|
EXCLUDE_PATTERNS =
|
||||||
|
EXAMPLE_PATH =
|
||||||
|
EXAMPLE_PATTERNS = *
|
||||||
|
EXAMPLE_RECURSIVE = NO
|
||||||
|
IMAGE_PATH =
|
||||||
|
INPUT_FILTER =
|
||||||
|
FILTER_SOURCE_FILES = NO
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to source browsing
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
SOURCE_BROWSER = NO
|
||||||
|
INLINE_SOURCES = NO
|
||||||
|
STRIP_CODE_COMMENTS = YES
|
||||||
|
REFERENCED_BY_RELATION = YES
|
||||||
|
REFERENCES_RELATION = YES
|
||||||
|
VERBATIM_HEADERS = YES
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the alphabetical class index
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
ALPHABETICAL_INDEX = NO
|
||||||
|
COLS_IN_ALPHA_INDEX = 5
|
||||||
|
IGNORE_PREFIX =
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the HTML output
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
GENERATE_HTML = YES
|
||||||
|
HTML_OUTPUT = html
|
||||||
|
HTML_FILE_EXTENSION = .html
|
||||||
|
HTML_HEADER =
|
||||||
|
HTML_FOOTER =
|
||||||
|
HTML_STYLESHEET =
|
||||||
|
HTML_ALIGN_MEMBERS = YES
|
||||||
|
GENERATE_HTMLHELP = NO
|
||||||
|
CHM_FILE =
|
||||||
|
HHC_LOCATION =
|
||||||
|
GENERATE_CHI = NO
|
||||||
|
BINARY_TOC = NO
|
||||||
|
TOC_EXPAND = NO
|
||||||
|
DISABLE_INDEX = NO
|
||||||
|
ENUM_VALUES_PER_LINE = 4
|
||||||
|
GENERATE_TREEVIEW = NO
|
||||||
|
TREEVIEW_WIDTH = 250
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the LaTeX output
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
GENERATE_LATEX = YES
|
||||||
|
LATEX_OUTPUT = latex
|
||||||
|
LATEX_CMD_NAME = latex
|
||||||
|
MAKEINDEX_CMD_NAME = makeindex
|
||||||
|
COMPACT_LATEX = NO
|
||||||
|
PAPER_TYPE = a4wide
|
||||||
|
EXTRA_PACKAGES =
|
||||||
|
LATEX_HEADER =
|
||||||
|
PDF_HYPERLINKS = NO
|
||||||
|
USE_PDFLATEX = NO
|
||||||
|
LATEX_BATCHMODE = NO
|
||||||
|
LATEX_HIDE_INDICES = NO
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the RTF output
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
GENERATE_RTF = NO
|
||||||
|
RTF_OUTPUT = rtf
|
||||||
|
COMPACT_RTF = NO
|
||||||
|
RTF_HYPERLINKS = NO
|
||||||
|
RTF_STYLESHEET_FILE =
|
||||||
|
RTF_EXTENSIONS_FILE =
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the man page output
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
GENERATE_MAN = NO
|
||||||
|
MAN_OUTPUT = man
|
||||||
|
MAN_EXTENSION = .3
|
||||||
|
MAN_LINKS = NO
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the XML output
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
GENERATE_XML = yes
|
||||||
|
XML_OUTPUT = xml
|
||||||
|
XML_SCHEMA =
|
||||||
|
XML_DTD =
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options for the AutoGen Definitions output
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
GENERATE_AUTOGEN_DEF = NO
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# configuration options related to the Perl module output
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
GENERATE_PERLMOD = NO
|
||||||
|
PERLMOD_LATEX = NO
|
||||||
|
PERLMOD_PRETTY = YES
|
||||||
|
PERLMOD_MAKEVAR_PREFIX =
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# Configuration options related to the preprocessor
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
ENABLE_PREPROCESSING = YES
|
||||||
|
MACRO_EXPANSION = NO
|
||||||
|
EXPAND_ONLY_PREDEF = NO
|
||||||
|
SEARCH_INCLUDES = YES
|
||||||
|
INCLUDE_PATH =
|
||||||
|
INCLUDE_FILE_PATTERNS =
|
||||||
|
PREDEFINED =
|
||||||
|
EXPAND_AS_DEFINED =
|
||||||
|
SKIP_FUNCTION_MACROS = YES
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# Configuration::addtions related to external references
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
TAGFILES =
|
||||||
|
GENERATE_TAGFILE =
|
||||||
|
ALLEXTERNALS = NO
|
||||||
|
EXTERNAL_GROUPS = YES
|
||||||
|
PERL_PATH = /usr/bin/perl
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# Configuration options related to the dot tool
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
CLASS_DIAGRAMS = YES
|
||||||
|
HIDE_UNDOC_RELATIONS = YES
|
||||||
|
HAVE_DOT = NO
|
||||||
|
CLASS_GRAPH = YES
|
||||||
|
COLLABORATION_GRAPH = YES
|
||||||
|
UML_LOOK = NO
|
||||||
|
TEMPLATE_RELATIONS = NO
|
||||||
|
INCLUDE_GRAPH = YES
|
||||||
|
INCLUDED_BY_GRAPH = YES
|
||||||
|
CALL_GRAPH = NO
|
||||||
|
GRAPHICAL_HIERARCHY = YES
|
||||||
|
DOT_IMAGE_FORMAT = png
|
||||||
|
DOT_PATH =
|
||||||
|
DOTFILE_DIRS =
|
||||||
|
MAX_DOT_GRAPH_WIDTH = 1024
|
||||||
|
MAX_DOT_GRAPH_HEIGHT = 1024
|
||||||
|
MAX_DOT_GRAPH_DEPTH = 1000
|
||||||
|
GENERATE_LEGEND = YES
|
||||||
|
DOT_CLEANUP = YES
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# Configuration::addtions related to the search engine
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
SEARCHENGINE = NO
|
@ -0,0 +1,84 @@
|
|||||||
|
sctest REQUIREMENTS
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
kde >= 3.2 is needed to run sctest
|
||||||
|
|
||||||
|
To compile sctest, the kde development packages
|
||||||
|
are needed: kdelibs-devel, kdebase-devel and python
|
||||||
|
|
||||||
|
scons is also needed http://www.scons.org
|
||||||
|
(this tool also used by Blender, ..)
|
||||||
|
Make sure scons is at least v0.96.1, otherwise
|
||||||
|
the compilation will fail. In case if you do not have
|
||||||
|
it, a minimum distribution is provided (see SCONS below)
|
||||||
|
|
||||||
|
-> One should only have to run :
|
||||||
|
$ scons
|
||||||
|
# scons install
|
||||||
|
(do "scons install" as root - the menus may not
|
||||||
|
show up if you skip this step)
|
||||||
|
|
||||||
|
|
||||||
|
SCONS
|
||||||
|
-----
|
||||||
|
|
||||||
|
-> If scons is missing, use the one bundled with PROGRAMNAME :
|
||||||
|
./unpack_local_scons.sh
|
||||||
|
python scons.py
|
||||||
|
python scons.py install
|
||||||
|
(run the last command as root)
|
||||||
|
|
||||||
|
|
||||||
|
-> For your convenience, a quick makefile is created :
|
||||||
|
./unpack_local_scons.sh
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
|
||||||
|
USEFUL SCONS COMMANDS
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
build the targets : scons
|
||||||
|
install them : scons install
|
||||||
|
clean the project : scons -c
|
||||||
|
uninstall : scons -c install
|
||||||
|
build in parallel : scons -j2
|
||||||
|
|
||||||
|
CONFIGURATION NOTES
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
The installation scripts are relying on the kde-config program.
|
||||||
|
The programs kde-config, qmake, uic and moc must be accesssible
|
||||||
|
through your PATH.
|
||||||
|
|
||||||
|
Qt and kde may not be installed as expected (in QTDIR and KDEDIR)
|
||||||
|
So until kde-config is able to give that information, you may
|
||||||
|
have to give those paths.
|
||||||
|
|
||||||
|
Here are some examples :
|
||||||
|
On Fedora/Redhat
|
||||||
|
scons configure kdeincludes=/usr/include/kde/
|
||||||
|
On Debian
|
||||||
|
scons configure qtincludes=/usr/include/qt/ kdeinclude=/usr/include/kde/
|
||||||
|
To install in some particular location with additional include paths
|
||||||
|
scons configure prefix=~/tmp extraincludes=/tmp/include:/usr/local/include
|
||||||
|
|
||||||
|
For more options to tune the build look at the .py files available on
|
||||||
|
the top-level directory :
|
||||||
|
generic.py, kde.py, ...
|
||||||
|
|
||||||
|
The build system is based on bksys, a build system that replaces
|
||||||
|
autoconf, automake and make in a row. Feel free to report your opinion
|
||||||
|
about it to the authors.
|
||||||
|
|
||||||
|
BUILDING RPMS OR DEBS WITH CHECKINSTALL
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
With checkinstall 1.6, use
|
||||||
|
$ scons
|
||||||
|
# checkinstall --fstrans=no --nodoc scons install
|
||||||
|
# scons uninstall
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
enjoy KStreamRipper
|
||||||
|
Michael Goettsche
|
@ -0,0 +1,20 @@
|
|||||||
|
all:
|
||||||
|
@/usr/bin/scons -Q
|
||||||
|
|
||||||
|
# it is also possible to use
|
||||||
|
# @/usr/bin/scons -Q -j4
|
||||||
|
|
||||||
|
install:
|
||||||
|
@/usr/bin/scons -Q install
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@/usr/bin/scons -Q -c
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
@/usr/bin/scons -Q -c install
|
||||||
|
|
||||||
|
dist:
|
||||||
|
@/usr/bin/scons -Q dist
|
||||||
|
|
||||||
|
distclean:
|
||||||
|
@/usr/bin/scons -Q distclean
|
@ -0,0 +1,234 @@
|
|||||||
|
#! /usr/bin/env python
|
||||||
|
## The kde detection is located in kde.py (have a look!)
|
||||||
|
## Delete the comments following as you see it fit
|
||||||
|
|
||||||
|
"""
|
||||||
|
scons files are python scripts, comments begin by a "#" symbol
|
||||||
|
or are enclosed between sequences of triple quotes, so
|
||||||
|
this is a comment :)
|
||||||
|
|
||||||
|
There is a lot of documentation and comments, but you can
|
||||||
|
remove them when you convert your program
|
||||||
|
"""
|
||||||
|
|
||||||
|
"""
|
||||||
|
----------------------------------
|
||||||
|
How to enjoy bksys full and plenty
|
||||||
|
(and forget about the autohell ? :)
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
The program scons is usually launched as "scons"
|
||||||
|
When it is not intalled globally, one can run
|
||||||
|
"python scons.py" instead (ie : to use the local scons
|
||||||
|
that comes with bksys - try ./unpack_local_scons.sh)
|
||||||
|
|
||||||
|
To compile the project, you will then only need to launch
|
||||||
|
scons on the top-level directory, the scripts find and
|
||||||
|
cache the proper environment automatically :
|
||||||
|
-> scons
|
||||||
|
(or python scons.py)
|
||||||
|
|
||||||
|
To clean the project
|
||||||
|
-> scons -c
|
||||||
|
(or python scons.py -c)
|
||||||
|
|
||||||
|
To install the project
|
||||||
|
-> scons install
|
||||||
|
(or python scons.py scons install)
|
||||||
|
|
||||||
|
To uninstall the project
|
||||||
|
-> scons -c install
|
||||||
|
|
||||||
|
To compile while being in a subdirectory
|
||||||
|
-> cd src; scons -u
|
||||||
|
|
||||||
|
To (re)configure the project and give particular arguments, use ie :
|
||||||
|
-> scons configure debug=1
|
||||||
|
-> scons configure prefix=/tmp/ita debug=full extraincludes=/usr/local/include:/tmp/include prefix=/usr/local
|
||||||
|
or -> python scons.py configure debug=1
|
||||||
|
etc ..
|
||||||
|
The variables are saved automatically after the first run
|
||||||
|
(look at kde.cache.py, ..)
|
||||||
|
|
||||||
|
Here is a quick list of options used (look at generic.py and kde.py) :
|
||||||
|
prefix
|
||||||
|
exec_prefix
|
||||||
|
datadir
|
||||||
|
libdir
|
||||||
|
kdeincludes
|
||||||
|
qtincludes
|
||||||
|
kdelibs
|
||||||
|
qtlibs
|
||||||
|
extraincludes (a list of paths separated by ':')
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
###########################################
|
||||||
|
## Common section, for loading the tools
|
||||||
|
|
||||||
|
## Load the builders in config
|
||||||
|
env = Environment(TARGS=COMMAND_LINE_TARGETS, ARGS=ARGUMENTS, tools=['default', 'generic', 'kde'], toolpath=['./', './admin'])
|
||||||
|
#env = Environment(TARGS=COMMAND_LINE_TARGETS, ARGS=ARGUMENTS, tools=['default', 'generic', 'kde', 'cg'], toolpath=['./'])
|
||||||
|
#env = Environment(TARGS=COMMAND_LINE_TARGETS, ARGS=ARGUMENTS, tools=['default', 'generic', 'kde', 'sound'], toolpath=['./'])
|
||||||
|
#env = Environment(TARGS=COMMAND_LINE_TARGETS, ARGS=ARGUMENTS, tools=['default', 'generic', 'kde', 'libxml'], toolpath=['./'])
|
||||||
|
|
||||||
|
## the configuration should be done by now, quit
|
||||||
|
if 'configure' in COMMAND_LINE_TARGETS:
|
||||||
|
env.Exit(0)
|
||||||
|
|
||||||
|
"""
|
||||||
|
Overview of the module system :
|
||||||
|
|
||||||
|
Each module (kde.py, generic.py, sound.py..) tries to load a stored
|
||||||
|
configuration when run. If the stored configuration does not exist
|
||||||
|
or if 'configure' is given on the command line (scons configure),
|
||||||
|
the module launches the verifications and detectioins and stores
|
||||||
|
the results. Modules also call exit when the detection fail.
|
||||||
|
|
||||||
|
For example, kde.py stores its config into kde.cache.py
|
||||||
|
|
||||||
|
This has several advantages for both developers and users :
|
||||||
|
- Users do not have to run ./configure to compile
|
||||||
|
- The build is insensitive to environment changes
|
||||||
|
- The cache maintains the objects so the config can be changed often
|
||||||
|
- Each module adds its own help via env.Help("message")
|
||||||
|
"""
|
||||||
|
|
||||||
|
## Use the variables available in the environment - unsafe, but moc, meinproc need it :-/
|
||||||
|
import os
|
||||||
|
env.AppendUnique( ENV = os.environ )
|
||||||
|
|
||||||
|
## The target make dist requires the python module shutil which is in 2.3
|
||||||
|
env.EnsurePythonVersion(2, 3)
|
||||||
|
|
||||||
|
## Bksys requires scons 0.96
|
||||||
|
env.EnsureSConsVersion(0, 96)
|
||||||
|
|
||||||
|
"""
|
||||||
|
Explanation of the 'env = Environment...' line :
|
||||||
|
* the command line arguments and targets are stored in env['TARGS'] and env['ARGS'] for use by the tools
|
||||||
|
* the part 'tools=['default', 'generic ..' detect and load the necessary functions for doing the things
|
||||||
|
* the part "toolpath=['./']" tells that the tools can be found in the current directory (generic.py, kde.py ..)
|
||||||
|
"""
|
||||||
|
|
||||||
|
"""
|
||||||
|
To load more configuration modules one should only have to add the appropriate tool
|
||||||
|
ie: to detect alsa and add the proper cflags, ldflags ..
|
||||||
|
a file alsa.py file will be needed, and one should then use :
|
||||||
|
env = Environment(TARGS=COMMAND_LINE_TARGETS, ARGS=ARGUMENTS, tools=['default', 'generic', 'kde', 'alsa'], toolpath=['./'])
|
||||||
|
|
||||||
|
You can also load environments that are targetted to different platforms
|
||||||
|
ie: if os.sys.platform = "darwin":
|
||||||
|
env = Environment(...
|
||||||
|
elsif os.sys.platform = "linux":
|
||||||
|
env = Environment(...
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
## Setup the cache directory - this avoids recompiling the same files over and over again
|
||||||
|
## this is very handy when working with cvs
|
||||||
|
env.CacheDir('cache')
|
||||||
|
|
||||||
|
## Avoid spreading .sconsign files everywhere - keep this line
|
||||||
|
env.SConsignFile('scons_signatures')
|
||||||
|
|
||||||
|
## If you need more libs and they rely on pkg-config
|
||||||
|
## ie: add support for GTK (source: the scons wiki on www.scons.org)
|
||||||
|
# env.ParseConfig('pkg-config --cflags --libs gtk+-2.0')
|
||||||
|
|
||||||
|
"""
|
||||||
|
This tell scons that there are no rcs or sccs files - this trick
|
||||||
|
can speed up things a bit when having lots of #include
|
||||||
|
in the source code and for network file systems
|
||||||
|
"""
|
||||||
|
env.SourceCode(".", None)
|
||||||
|
|
||||||
|
dirs = [ '.', 'src', 'po', 'doc']
|
||||||
|
|
||||||
|
for dir in dirs:
|
||||||
|
env.SourceCode(dir, None)
|
||||||
|
|
||||||
|
## If we had only one program (named kvigor) to build,
|
||||||
|
## we could add before exporting the env (some kde
|
||||||
|
## helpers in kde.py need it) :
|
||||||
|
# env['APPNAME'] = 'kvigor'
|
||||||
|
|
||||||
|
## Use this define if you are using the kde translation scheme (.po files)
|
||||||
|
env.Append( CPPFLAGS = ['-DQT_NO_TRANSLATION'] )
|
||||||
|
|
||||||
|
## Add this define if you want to use qthreads
|
||||||
|
#env.Append( CPPFLAGS = ['-DQT_THREAD_SUPPORT', '-D_REENTRANT'] )
|
||||||
|
|
||||||
|
## To use kdDebug(intvalue)<<"some trace"<<endl; you need to define -DDEBUG - it is done
|
||||||
|
## in generic.py automatically when you do scons configure debug=1
|
||||||
|
|
||||||
|
## There are also many other defines :
|
||||||
|
### -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION
|
||||||
|
# where are they documented ? if you know, mail tnagyemail-mail@yahoo@fr please
|
||||||
|
|
||||||
|
## Important : export the environment so that SConscript files can the
|
||||||
|
## configuration and builders in it
|
||||||
|
Export("env")
|
||||||
|
|
||||||
|
|
||||||
|
####################################################
|
||||||
|
## Process the SConscript files to build the targets
|
||||||
|
## the sconscript files are comparable to Makefile.am_s
|
||||||
|
## except that no makefile is generated here :)
|
||||||
|
|
||||||
|
env.SConscript("src/SConscript")
|
||||||
|
env.SConscript("doc/SConscript")
|
||||||
|
env.SConscript("po/SConscript")
|
||||||
|
|
||||||
|
####################################################
|
||||||
|
## Quick helper to distribute the program
|
||||||
|
|
||||||
|
"""
|
||||||
|
'scons dist' creates a tarball named bksys-version.tar.bz2
|
||||||
|
containing the source code - this is handy
|
||||||
|
do not forget to remove the object files by scons -c
|
||||||
|
"""
|
||||||
|
|
||||||
|
### To make a tarball of your sctest
|
||||||
|
if 'dist' in COMMAND_LINE_TARGETS:
|
||||||
|
|
||||||
|
APPNAME = 'sctest'
|
||||||
|
VERSION = os.popen("cat VERSION").read().rstrip()
|
||||||
|
FOLDER = APPNAME+'-'+VERSION
|
||||||
|
ARCHIVE = FOLDER+'.tar.bz2'
|
||||||
|
|
||||||
|
GREEN ="\033[92m"
|
||||||
|
NORMAL ="\033[0m"
|
||||||
|
|
||||||
|
import shutil
|
||||||
|
import glob
|
||||||
|
|
||||||
|
## check if the temporary directory already exists
|
||||||
|
if os.path.isdir(FOLDER):
|
||||||
|
shutil.rmtree(FOLDER)
|
||||||
|
|
||||||
|
## create a temporary directory
|
||||||
|
startdir = os.getcwd()
|
||||||
|
shutil.copytree(startdir, FOLDER)
|
||||||
|
|
||||||
|
## remove the unnecessary files
|
||||||
|
os.popen("find "+FOLDER+" -name \"{arch}\" | xargs rm -rf")
|
||||||
|
os.popen("find "+FOLDER+" -name \".arch-ids\" | xargs rm -rf")
|
||||||
|
os.popen("find "+FOLDER+" -name \".arch-inventory\" | xargs rm -f")
|
||||||
|
os.popen("find "+FOLDER+" -name \"sconsign*\" | xargs rm -f")
|
||||||
|
os.popen("find "+FOLDER+" -name \"*cache*\" | xargs rm -rf")
|
||||||
|
os.popen("find "+FOLDER+" -name \"kdiss*-data\" | xargs rm -rf")
|
||||||
|
os.popen("find "+FOLDER+" -name \"*.pyc\" | xargs rm -f")
|
||||||
|
os.popen("rm -f "+FOLDER+"/config.py*")
|
||||||
|
|
||||||
|
## make the tarball
|
||||||
|
print GREEN+"Writing archive "+ARCHIVE+NORMAL
|
||||||
|
os.popen("tar cjf "+ARCHIVE+" "+FOLDER)
|
||||||
|
|
||||||
|
## remove the temporary directory
|
||||||
|
if os.path.isdir(FOLDER):
|
||||||
|
shutil.rmtree(FOLDER)
|
||||||
|
|
||||||
|
env.Default(None)
|
||||||
|
env.Exit(0)
|
||||||
|
|
@ -0,0 +1,7 @@
|
|||||||
|
--TODO--
|
||||||
|
|
||||||
|
-implement stats widget
|
||||||
|
-implement filtering( just ripping a special artist/song )
|
||||||
|
-(receiving shoutcast list via web)
|
||||||
|
|
||||||
|
|
@ -0,0 +1,161 @@
|
|||||||
|
## Thomas Nagy, 2005
|
||||||
|
|
||||||
|
"""
|
||||||
|
Detect and store the most common options
|
||||||
|
* kdecxxflags : debug=1 (-g) or debug=full (-g3, slower)
|
||||||
|
else use the user CXXFLAGS if any, - or -O2 by default
|
||||||
|
* prefix : the installation path
|
||||||
|
* extraincludes : a list of paths separated by ':'
|
||||||
|
ie: scons configure debug=full prefix=/usr/local extraincludes=/tmp/include:/usr/local
|
||||||
|
"""
|
||||||
|
|
||||||
|
BOLD ="\033[1m"
|
||||||
|
RED ="\033[91m"
|
||||||
|
GREEN ="\033[92m"
|
||||||
|
YELLOW ="\033[1m" #"\033[93m" # unreadable on white backgrounds
|
||||||
|
CYAN ="\033[96m"
|
||||||
|
NORMAL ="\033[0m"
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
def exists(env):
|
||||||
|
return true
|
||||||
|
|
||||||
|
def generate(env):
|
||||||
|
env.Help("""
|
||||||
|
"""+BOLD+
|
||||||
|
"""*** Generic options ***
|
||||||
|
-----------------------"""+NORMAL+"""
|
||||||
|
"""+BOLD+"""* debug """+NORMAL+""": debug=1 (-g) or debug=full (-g3, slower) else use environment CXXFLAGS, or -O2 by default
|
||||||
|
"""+BOLD+"""* prefix """+NORMAL+""": the installation path
|
||||||
|
"""+BOLD+"""* extraincludes """+NORMAL+""": a list of paths separated by ':'
|
||||||
|
ie: """+BOLD+"""scons configure debug=full prefix=/usr/local extraincludes=/tmp/include:/usr/local
|
||||||
|
"""+NORMAL)
|
||||||
|
|
||||||
|
## Bksys requires scons 0.96
|
||||||
|
env.EnsureSConsVersion(0, 96)
|
||||||
|
|
||||||
|
## Global cache directory
|
||||||
|
## Put all project files in it so a rm -rf cache will clean up the config
|
||||||
|
if not env.has_key('CACHEDIR'):
|
||||||
|
env['CACHEDIR'] = os.getcwd()+'/cache/'
|
||||||
|
if not os.path.isdir(env['CACHEDIR']):
|
||||||
|
os.mkdir(env['CACHEDIR'])
|
||||||
|
|
||||||
|
## SCons cache directory
|
||||||
|
## this avoids recompiling the same files over and over again: very handy when working with cvs
|
||||||
|
env.CacheDir(os.getcwd()+'/cache/objects')
|
||||||
|
|
||||||
|
## Avoid spreading .sconsign files everywhere - keep this line
|
||||||
|
env.SConsignFile(env['CACHEDIR']+'/scons_signatures')
|
||||||
|
|
||||||
|
# Special trick for installing rpms ...
|
||||||
|
env['DESTDIR']=''
|
||||||
|
if 'install' in env['TARGS'] and os.environ.has_key('DESTDIR'):
|
||||||
|
env['DESTDIR']=os.environ['DESTDIR']+'/'
|
||||||
|
print CYAN+'** Enabling DESTDIR for the project ** ' + NORMAL + env['DESTDIR']
|
||||||
|
|
||||||
|
# load the options
|
||||||
|
from SCons.Options import Options, PathOption
|
||||||
|
cachefile=env['CACHEDIR']+'generic.cache.py'
|
||||||
|
opts = Options(cachefile)
|
||||||
|
opts.AddOptions(
|
||||||
|
( 'KDECCFLAGS', 'C flags' ),
|
||||||
|
( 'KDECXXFLAGS', 'debug level for the project : full or just anything' ),
|
||||||
|
( 'KDELINKFLAGS', 'additional link flags' ),
|
||||||
|
( 'PREFIX', 'prefix for installation' ),
|
||||||
|
( 'EXTRAINCLUDES', 'extra include paths for the project' ),
|
||||||
|
( 'ISCONFIGURED', 'is the project configured' ),
|
||||||
|
)
|
||||||
|
opts.Update(env)
|
||||||
|
|
||||||
|
# use this to avoid an error message 'how to make target configure ?'
|
||||||
|
env.Alias('configure', None)
|
||||||
|
|
||||||
|
import SCons.Util
|
||||||
|
|
||||||
|
# configure the environment if needed
|
||||||
|
if 'configure' in env['TARGS'] or not env.has_key('ISCONFIGURED'):
|
||||||
|
# be paranoid, unset existing variables
|
||||||
|
if env.has_key('KDECXXFLAGS'):
|
||||||
|
env.__delitem__('KDECXXFLAGS')
|
||||||
|
if env.has_key('KDECCFLAGS'):
|
||||||
|
env.__delitem__('KDECCFLAGS')
|
||||||
|
if env.has_key('KDELINKFLAGS'):
|
||||||
|
env.__delitem__('KDELINKFLAGS')
|
||||||
|
if env.has_key('PREFIX'):
|
||||||
|
env.__delitem__('PREFIX')
|
||||||
|
if env.has_key('EXTRAINCLUDES'):
|
||||||
|
env.__delitem__('EXTRAINCLUDES')
|
||||||
|
if env.has_key('ISCONFIGURED'):
|
||||||
|
env.__delitem__('ISCONFIGURED')
|
||||||
|
|
||||||
|
if env['ARGS'].get('debug', None):
|
||||||
|
debuglevel = env['ARGS'].get('debug', None)
|
||||||
|
print CYAN+'** Enabling debug for the project **' + NORMAL
|
||||||
|
if (debuglevel == "full"):
|
||||||
|
env['KDECXXFLAGS'] = ['-DDEBUG', '-g3']
|
||||||
|
else:
|
||||||
|
env['KDECXXFLAGS'] = ['-DDEBUG', '-g']
|
||||||
|
else:
|
||||||
|
if os.environ.has_key('CXXFLAGS'):
|
||||||
|
# user-defined flags (gentooers will be elighted)
|
||||||
|
env['KDECXXFLAGS'] = SCons.Util.CLVar( os.environ['CXXFLAGS'] )
|
||||||
|
env.Append( KDECXXFLAGS = ['-DNDEBUG', '-DNO_DEBUG'] )
|
||||||
|
else:
|
||||||
|
env.Append(KDECXXFLAGS = ['-O2', '-DNDEBUG', '-DNO_DEBUG'])
|
||||||
|
|
||||||
|
if os.environ.has_key('CFLAGS'):
|
||||||
|
env['KDECCFLAGS'] = SCons.Util.CLVar( os.environ['CFLAGS'] )
|
||||||
|
|
||||||
|
## FreeBSD settings (contributed by will at freebsd dot org)
|
||||||
|
if os.uname()[0] == "FreeBSD":
|
||||||
|
if os.environ.has_key('PTHREAD_LIBS'):
|
||||||
|
env.AppendUnique( KDELINKFLAGS = SCons.Util.CLVar( os.environ['PTHREAD_LIBS'] ) )
|
||||||
|
else:
|
||||||
|
syspf = os.popen('/sbin/sysctl kern.osreldate')
|
||||||
|
osreldate = int(syspf.read().split()[1])
|
||||||
|
syspf.close()
|
||||||
|
if osreldate < 500016:
|
||||||
|
env.AppendUnique( KDELINKFLAGS = ['-pthread'])
|
||||||
|
env.AppendUnique( KDECXXFLAGS = ['-D_THREAD_SAFE'])
|
||||||
|
elif osreldate < 502102:
|
||||||
|
env.AppendUnique( KDELINKFLAGS = ['-lc_r'])
|
||||||
|
env.AppendUnique( KDECXXFLAGS = ['-D_THREAD_SAFE'])
|
||||||
|
else:
|
||||||
|
env.AppendUnique( KDELINKFLAGS = ['-pthread'])
|
||||||
|
|
||||||
|
# User-specified prefix
|
||||||
|
if env['ARGS'].get('prefix', None):
|
||||||
|
env['PREFIX'] = env['ARGS'].get('prefix', None)
|
||||||
|
print CYAN+'** set the installation prefix for the project : ' + env['PREFIX'] +' **'+ NORMAL
|
||||||
|
elif env.has_key('PREFIX'):
|
||||||
|
env.__delitem__('PREFIX')
|
||||||
|
|
||||||
|
# User-specified include paths
|
||||||
|
env['EXTRAINCLUDES'] = env['ARGS'].get('extraincludes', None)
|
||||||
|
if env['ARGS'].get('extraincludes', None):
|
||||||
|
print CYAN+'** set extra include paths for the project : ' + env['EXTRAINCLUDES'] +' **'+ NORMAL
|
||||||
|
elif env.has_key('EXTRAINCLUDES'):
|
||||||
|
env.__delitem__('EXTRAINCLUDES')
|
||||||
|
|
||||||
|
env['ISCONFIGURED']=1
|
||||||
|
|
||||||
|
# And finally save the options in the cache
|
||||||
|
opts.Save(cachefile, env)
|
||||||
|
|
||||||
|
if env.has_key('KDECXXFLAGS'):
|
||||||
|
env.AppendUnique( CPPFLAGS = env['KDECXXFLAGS'] )
|
||||||
|
|
||||||
|
if env.has_key('KDECCFLAGS'):
|
||||||
|
env.AppendUnique( CCFLAGS = env['KDECCFLAGS'] )
|
||||||
|
|
||||||
|
if env.has_key('KDELINKFLAGS'):
|
||||||
|
env.AppendUnique( LINKFLAGS = env['KDELINKFLAGS'] )
|
||||||
|
|
||||||
|
if env.has_key('EXTRAINCLUDES'):
|
||||||
|
incpaths = []
|
||||||
|
for dir in str(env['EXTRAINCLUDES']).split(':'):
|
||||||
|
incpaths.append( dir )
|
||||||
|
env.Append(CPPPATH = incpaths)
|
||||||
|
|
@ -0,0 +1,683 @@
|
|||||||
|
#! /usr/bin/env python
|
||||||
|
# more or less derived from scons qt.py
|
||||||
|
# this version makes less scans over the data and is thus faster
|
||||||
|
# it is less accurate however (when mocable classes become unmocable)
|
||||||
|
# Thomas Nagy, 2004, 2005 <tnagy2^8@yahoo.fr>
|
||||||
|
|
||||||
|
from time import *
|
||||||
|
import SCons.Util
|
||||||
|
import string
|
||||||
|
|
||||||
|
import os, re
|
||||||
|
|
||||||
|
BOLD ="\033[1m"
|
||||||
|
RED ="\033[91m"
|
||||||
|
GREEN ="\033[92m"
|
||||||
|
YELLOW ="\033[1m" #"\033[93m" # unreadable on white backgrounds
|
||||||
|
CYAN ="\033[96m"
|
||||||
|
NORMAL ="\033[0m"
|
||||||
|
|
||||||
|
# Returns the name of the shared object (i.e. libkdeui.so.4)
|
||||||
|
# referenced by a libtool archive (like libkdeui.la)
|
||||||
|
def getSOfromLA(lafile):
|
||||||
|
contents = open(lafile, 'r').read()
|
||||||
|
match = re.search("^dlname='([^']*)'$", contents, re.M)
|
||||||
|
if match:
|
||||||
|
return match.group(1)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def exists(env):
|
||||||
|
return True
|
||||||
|
|
||||||
|
def detect_kde(env):
|
||||||
|
""" Detect the qt and kde environment using kde-config mostly """
|
||||||
|
|
||||||
|
prefix = env['ARGS'].get('prefix', None)
|
||||||
|
execprefix = env['ARGS'].get('execprefix', None)
|
||||||
|
datadir = env['ARGS'].get('datadir', None)
|
||||||
|
libdir = env['ARGS'].get('libdir', None)
|
||||||
|
kdeincludes= env['ARGS'].get('kdeincludes', None)
|
||||||
|
kdelibs = env['ARGS'].get('kdelibs', None)
|
||||||
|
qtincludes = env['ARGS'].get('qtincludes', None)
|
||||||
|
qtlibs = env['ARGS'].get('qtlibs', None)
|
||||||
|
|
||||||
|
## Detect the kde libraries
|
||||||
|
print "Checking for kde-config : ",
|
||||||
|
kde_config = os.popen("which kde-config 2>/dev/null").read().strip()
|
||||||
|
if len(kde_config):
|
||||||
|
print GREEN + "kde-config was found" + NORMAL
|
||||||
|
else:
|
||||||
|
print RED + "kde-config was NOT found in your PATH"+ NORMAL
|
||||||
|
print "Make sure kde is installed properly"
|
||||||
|
print "(missing package kdebase-devel?)"
|
||||||
|
env.Exit(1)
|
||||||
|
env['KDEDIR'] = os.popen('kde-config -prefix').read().strip()
|
||||||
|
|
||||||
|
print "Checking for kde version : ",
|
||||||
|
kde_version = os.popen("kde-config --version|grep KDE").read().strip().split()[1]
|
||||||
|
if int(kde_version[0]) != 3 or int(kde_version[2]) < 2:
|
||||||
|
print RED + kde_version
|
||||||
|
print RED + "Your kde version can be too old" + NORMAL
|
||||||
|
print RED + "Please make sure kde is at least 3.2" + NORMAL
|
||||||
|
else:
|
||||||
|
print GREEN + kde_version + NORMAL
|
||||||
|
|
||||||
|
## Detect the qt library
|
||||||
|
print "Checking for the qt library : ",
|
||||||
|
qtdir = os.getenv("QTDIR")
|
||||||
|
if qtdir:
|
||||||
|
print GREEN + "qt is in " + qtdir + NORMAL
|
||||||
|
else:
|
||||||
|
libdir = os.popen('kde-config --expandvars --install lib').read().strip()
|
||||||
|
libkdeuiSO = libdir+'/'+getSOfromLA(libdir+'/libkdeui.la')
|
||||||
|
m = re.search('(.*)/lib/libqt.*', os.popen('ldd '+libkdeuiSO+' | grep libqt').read().strip().split()[2])
|
||||||
|
if m:
|
||||||
|
qtdir = m.group(1)
|
||||||
|
print YELLOW+"qt was found as " + m.group(1) + NORMAL
|
||||||
|
else:
|
||||||
|
print RED+"qt was not found"+NORMAL
|
||||||
|
print RED+"Please set QTDIR first (/usr/lib/qt3?)"+NORMAL
|
||||||
|
env.Exit(1)
|
||||||
|
env['QTDIR'] = qtdir.strip()
|
||||||
|
|
||||||
|
## Find the necessary programs uic and moc
|
||||||
|
print "Checking for uic : ",
|
||||||
|
uic = qtdir + "/bin/uic"
|
||||||
|
if os.path.isfile(uic):
|
||||||
|
print GREEN+"uic was found as "+uic+NORMAL
|
||||||
|
else:
|
||||||
|
uic = os.popen("which uic 2>/dev/null").read().strip()
|
||||||
|
if len(uic):
|
||||||
|
print YELLOW+"uic was found as "+uic+NORMAL
|
||||||
|
else:
|
||||||
|
uic = os.popen("which uic 2>/dev/null").read().strip()
|
||||||
|
if len(uic):
|
||||||
|
print YELLOW+"uic was found as "+uic+NORMAL
|
||||||
|
else:
|
||||||
|
print RED+"uic was not found - set QTDIR put it in your PATH ?"+NORMAL
|
||||||
|
env.Exit(1)
|
||||||
|
env['QT_UIC'] = uic
|
||||||
|
|
||||||
|
print "Checking for moc : ",
|
||||||
|
moc = qtdir + "/bin/moc"
|
||||||
|
if os.path.isfile(moc):
|
||||||
|
print GREEN+"moc was found as "+moc+NORMAL
|
||||||
|
else:
|
||||||
|
moc = os.popen("which moc 2>/dev/null").read().strip()
|
||||||
|
if len(moc):
|
||||||
|
print YELLOW+"moc was found as "+moc+NORMAL
|
||||||
|
elif os.path.isfile("/usr/share/qt3/bin/moc"):
|
||||||
|
moc = "/usr/share/qt3/bin/moc"
|
||||||
|
print YELLOW+"moc was found as "+moc+NORMAL
|
||||||
|
else:
|
||||||
|
print RED+"moc was not found - set QTDIR or put it in your PATH ?"+NORMAL
|
||||||
|
env.Exit(1)
|
||||||
|
env['QT_MOC'] = moc
|
||||||
|
|
||||||
|
## check for the qt and kde includes
|
||||||
|
print "Checking for the qt includes : ",
|
||||||
|
if qtincludes and os.path.isfile(qtincludes + "/qlayout.h"):
|
||||||
|
# The user told where to look for and it looks valid
|
||||||
|
print GREEN+"ok "+qtincludes+NORMAL
|
||||||
|
else:
|
||||||
|
if os.path.isfile(qtdir + "/include/qlayout.h"):
|
||||||
|
# Automatic detection
|
||||||
|
print GREEN+"ok "+qtdir + "/include/ "+NORMAL
|
||||||
|
qtincludes = qtdir + "/include/"
|
||||||
|
elif os.path.isfile("/usr/include/qt3/qlayout.h"):
|
||||||
|
# Debian probably
|
||||||
|
print YELLOW+"the qt headers were found in /usr/include/qt3/ "+NORMAL
|
||||||
|
qtincludes = "/usr/include/qt3"
|
||||||
|
else:
|
||||||
|
print RED+"the qt headers were not found"+NORMAL
|
||||||
|
env.Exit(1)
|
||||||
|
|
||||||
|
print "Checking for the kde includes : ",
|
||||||
|
kdeprefix = os.popen("kde-config --prefix").read().strip()
|
||||||
|
if not kdeincludes:
|
||||||
|
kdeincludes = kdeprefix+"/include/"
|
||||||
|
if os.path.isfile(kdeincludes + "/klineedit.h"):
|
||||||
|
print GREEN+"ok "+kdeincludes+NORMAL
|
||||||
|
else:
|
||||||
|
if os.path.isfile(kdeprefix+"/include/kde/klineedit.h"):
|
||||||
|
# Debian, Fedora probably
|
||||||
|
print YELLOW+"the kde headers were found in "+kdeprefix+"/include/kde/"+NORMAL
|
||||||
|
kdeincludes = kdeprefix + "/include/kde/"
|
||||||
|
else:
|
||||||
|
print RED+"The kde includes were NOT found"+NORMAL
|
||||||
|
env.Exit(1)
|
||||||
|
|
||||||
|
if prefix:
|
||||||
|
## use the user-specified prefix
|
||||||
|
if not execprefix:
|
||||||
|
execprefix = prefix
|
||||||
|
if not datadir:
|
||||||
|
datadir = prefix+"/share"
|
||||||
|
if not libdir:
|
||||||
|
libdir = execprefix+"/lib"
|
||||||
|
|
||||||
|
subst_vars = lambda x: x.replace('${exec_prefix}',execprefix).replace('${datadir}',datadir).replace('${libdir}',libdir)
|
||||||
|
env['KDEBIN'] = subst_vars(os.popen('kde-config --install exe').read().strip())
|
||||||
|
env['KDEAPPS'] = subst_vars(os.popen('kde-config --install apps').read().strip())
|
||||||
|
env['KDEDATA'] = subst_vars(os.popen('kde-config --install data').read().strip())
|
||||||
|
env['KDEMODULE']= subst_vars(os.popen('kde-config --install module').read().strip())
|
||||||
|
env['KDELOCALE']= subst_vars(os.popen('kde-config --install locale').read().strip())
|
||||||
|
env['KDEDOC'] = subst_vars(os.popen('kde-config --install html').read().strip())
|
||||||
|
env['KDEKCFG'] = subst_vars(os.popen('kde-config --install kcfg').read().strip())
|
||||||
|
env['KDEXDG'] = subst_vars(os.popen('kde-config --install xdgdata-apps').read().strip())
|
||||||
|
env['KDEMENU'] = subst_vars(os.popen('kde-config --install apps').read().strip())
|
||||||
|
env['KDEMIME'] = subst_vars(os.popen('kde-config --install mime').read().strip())
|
||||||
|
env['KDEICONS'] = subst_vars(os.popen('kde-config --install icon').read().strip())
|
||||||
|
env['KDESERV'] = subst_vars(os.popen('kde-config --install services').read().strip())
|
||||||
|
else:
|
||||||
|
# the user has given no prefix, install as a normal kde app
|
||||||
|
env['PREFIX'] = os.popen('kde-config --prefix').read().strip()
|
||||||
|
env['KDEBIN'] = os.popen('kde-config --expandvars --install exe').read().strip()
|
||||||
|
env['KDEAPPS'] = os.popen('kde-config --expandvars --install apps').read().strip()
|
||||||
|
env['KDEDATA'] = os.popen('kde-config --expandvars --install data').read().strip()
|
||||||
|
env['KDEMODULE']= os.popen('kde-config --expandvars --install module').read().strip()
|
||||||
|
env['KDELOCALE']= os.popen('kde-config --expandvars --install locale').read().strip()
|
||||||
|
env['KDEDOC'] = os.popen('kde-config --expandvars --install html').read().strip()
|
||||||
|
env['KDEKCFG'] = os.popen('kde-config --expandvars --install kcfg').read().strip()
|
||||||
|
env['KDEXDG'] = os.popen('kde-config --expandvars --install xdgdata-apps').read().strip()
|
||||||
|
env['KDEMENU'] = os.popen('kde-config --expandvars --install apps').read().strip()
|
||||||
|
env['KDEMIME'] = os.popen('kde-config --expandvars --install mime').read().strip()
|
||||||
|
env['KDEICONS'] = os.popen('kde-config --expandvars --install icon').read().strip()
|
||||||
|
env['KDESERV'] = os.popen('kde-config --expandvars --install services').read().strip()
|
||||||
|
|
||||||
|
env['QTPLUGINS']=os.popen('kde-config --expandvars --install qtplugins').read().strip()
|
||||||
|
|
||||||
|
## kde libs and includes
|
||||||
|
env['KDEINCLUDEPATH']= kdeincludes
|
||||||
|
if not kdelibs:
|
||||||
|
kdelibs = os.popen('kde-config --expandvars --install lib').read().strip()
|
||||||
|
env['KDELIBPATH']= kdelibs
|
||||||
|
|
||||||
|
## qt libs and includes
|
||||||
|
env['QTINCLUDEPATH']= qtincludes
|
||||||
|
if not qtlibs:
|
||||||
|
qtlibs = qtdir+"/lib"
|
||||||
|
env['QTLIBPATH']= qtlibs
|
||||||
|
|
||||||
|
def mocscan(target, source, env):
|
||||||
|
splitext = SCons.Util.splitext
|
||||||
|
|
||||||
|
q_object_search = re.compile(r'[^A-Za-z0-9]Q_OBJECT[^A-Za-z0-9]')
|
||||||
|
|
||||||
|
for obj in source:
|
||||||
|
|
||||||
|
if not obj.has_builder():
|
||||||
|
# binary obj file provided
|
||||||
|
continue
|
||||||
|
|
||||||
|
cpp = obj.sources[0]
|
||||||
|
if not splitext(str(cpp))[1] == '.cpp':
|
||||||
|
# not a cplusplus source
|
||||||
|
continue
|
||||||
|
|
||||||
|
# if we have a .ui file, it is automatically handled by Uic
|
||||||
|
uiname = string.split(cpp.abspath, '.cpp')[0] + ".ui"
|
||||||
|
if os.path.isfile(uiname):
|
||||||
|
continue
|
||||||
|
|
||||||
|
hname = splitext(cpp.name)[0] + ".h"
|
||||||
|
h = SCons.Node.FS.find_file(hname, (cpp.get_dir(),) )
|
||||||
|
|
||||||
|
if h:
|
||||||
|
# h file with the Q_OBJECT macro found -> add .moc file
|
||||||
|
mocfile = string.split(cpp.abspath, '.cpp')[0] + ".moc"
|
||||||
|
# trick : check if the moc file already exists (avoid a scan)
|
||||||
|
if os.path.isfile(mocfile):
|
||||||
|
env.Moc(h)
|
||||||
|
elif q_object_search.search(h.get_contents()):
|
||||||
|
# FIXME : strong assumption
|
||||||
|
env.Moc(h)
|
||||||
|
|
||||||
|
return (target, source)
|
||||||
|
|
||||||
|
def generate(env):
|
||||||
|
|
||||||
|
import SCons.Defaults
|
||||||
|
import SCons.Tool
|
||||||
|
env.Help("""
|
||||||
|
"""+BOLD+
|
||||||
|
"""*** KDE options ***
|
||||||
|
-------------------"""+NORMAL+"""
|
||||||
|
"""+BOLD+"""* prefix """+NORMAL+""": base install path, ie: /usr/local
|
||||||
|
"""+BOLD+"""* execprefix """+NORMAL+""": install path for binaries, ie: /usr/bin
|
||||||
|
"""+BOLD+"""* datadir """+NORMAL+""": install path for the data, ie: /usr/local/share
|
||||||
|
"""+BOLD+"""* libdir """+NORMAL+""": install path for the libs, ie: /usr/lib
|
||||||
|
"""+BOLD+"""* kdeincludes"""+NORMAL+""": path to the kde includes (/usr/include/kde on debian, ...)
|
||||||
|
"""+BOLD+"""* qtincludes """+NORMAL+""": same punishment, for qt includes (/usr/include/qt on debian, ...)
|
||||||
|
"""+BOLD+"""* kdelibs """+NORMAL+""": path to the kde libs, for linking the programs
|
||||||
|
"""+BOLD+"""* qtlibs """+NORMAL+""": same punishment, for qt libraries
|
||||||
|
ie: """+BOLD+"""scons configure libdir=/usr/local/lib qtincludes=/usr/include/qt
|
||||||
|
"""+NORMAL)
|
||||||
|
|
||||||
|
CLVar = SCons.Util.CLVar
|
||||||
|
splitext = SCons.Util.splitext
|
||||||
|
Builder = SCons.Builder.Builder
|
||||||
|
|
||||||
|
# Detect the environment - replaces ./configure implicitely
|
||||||
|
# and store the options into a cache
|
||||||
|
from SCons.Options import Options
|
||||||
|
cachefile=env['CACHEDIR']+'/kde.cache.py'
|
||||||
|
opts = Options(cachefile)
|
||||||
|
opts.AddOptions(
|
||||||
|
( 'QTDIR', 'root of qt directory' ),
|
||||||
|
( 'QTLIBPATH', 'path to the qt libraries' ),
|
||||||
|
( 'QTINCLUDEPATH', 'path to the qt includes' ),
|
||||||
|
( 'QT_UIC', 'moc directory'),
|
||||||
|
( 'QT_MOC', 'moc executable command'),
|
||||||
|
( 'QTPLUGINS', 'uic executable command'),
|
||||||
|
( 'KDEDIR', 'root of kde directory' ),
|
||||||
|
( 'KDELIBPATH', 'path to the kde libs' ),
|
||||||
|
( 'KDEINCLUDEPATH', 'path to the kde includes' ),
|
||||||
|
|
||||||
|
( 'PREFIX', 'root of the program installation'),
|
||||||
|
|
||||||
|
( 'KDEBIN', 'installation path of the kde binaries'),
|
||||||
|
( 'KDEMODULE', 'installation path of the parts and libs'),
|
||||||
|
( 'KDEAPPS', ''),
|
||||||
|
( 'KDEDATA', 'installation path of the application data'),
|
||||||
|
( 'KDELOCALE', ''),
|
||||||
|
( 'KDEDOC', 'installation path of the application documentation'),
|
||||||
|
( 'KDEKCFG', 'installation path of the .kcfg files'),
|
||||||
|
( 'KDEXDG', 'installation path of the service types'),
|
||||||
|
( 'KDEMENU', ''),
|
||||||
|
( 'KDEMIME', 'installation path of to the mimetypes'),
|
||||||
|
( 'KDEICONS', ''),
|
||||||
|
( 'KDESERV', ''),
|
||||||
|
)
|
||||||
|
opts.Update(env)
|
||||||
|
|
||||||
|
# reconfigure when things are missing
|
||||||
|
if 'configure' in env['TARGS'] or not env.has_key('QTDIR') or not env.has_key('KDEDIR'):
|
||||||
|
detect_kde(env)
|
||||||
|
|
||||||
|
# finally save the configuration
|
||||||
|
opts.Save(cachefile, env)
|
||||||
|
|
||||||
|
## set default variables, one can override them in sconscript files
|
||||||
|
env.Append(CXXFLAGS = ['-I'+env['KDEINCLUDEPATH'], '-I'+env['QTINCLUDEPATH'] ])
|
||||||
|
env.Append(LIBPATH = [env['KDELIBPATH'], env['QTLIBPATH'] ])
|
||||||
|
|
||||||
|
env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1
|
||||||
|
|
||||||
|
env['QT_AUTOSCAN'] = 1
|
||||||
|
env['QT_DEBUG'] = 0
|
||||||
|
|
||||||
|
env['QT_UIC_HFLAGS'] = '-L $QTPLUGINS -nounload'
|
||||||
|
env['QT_UIC_CFLAGS'] = '$QT_UIC_HFLAGS -tr tr2i18n'
|
||||||
|
env['QT_LIBS'] = 'qt-mt'
|
||||||
|
|
||||||
|
env['LIBTOOL_FLAGS'] = '--silent --mode=compile --tag=CXX'
|
||||||
|
|
||||||
|
env['QT_UICIMPLPREFIX'] = ''
|
||||||
|
env['QT_UICIMPLSUFFIX'] = '.cpp'
|
||||||
|
env['QT_MOCHPREFIX'] = ''
|
||||||
|
env['QT_MOCHSUFFIX'] = '.moc'
|
||||||
|
env['KDE_KCFG_IMPLPREFIX'] = ''
|
||||||
|
env['KDE_KCFG_IMPL_HSUFFIX'] = '.h'
|
||||||
|
env['KDE_KCFG_IMPL_CSUFFIX'] = '.cpp'
|
||||||
|
env['KDE_SKEL_IMPL_SUFFIX'] = '.skel'
|
||||||
|
env['MEINPROC'] = 'meinproc'
|
||||||
|
env['MSGFMT'] = 'msgfmt'
|
||||||
|
|
||||||
|
|
||||||
|
###### ui file processing
|
||||||
|
def uicGenerator(target, source, env, for_signature):
|
||||||
|
act=[]
|
||||||
|
act.append('$QT_UIC $QT_UIC_HFLAGS -o '+target[0].path+' '+source[0].path)
|
||||||
|
act.append('rm -f ' +target[1].path)
|
||||||
|
act.append('echo \'#include <klocale.h>\' >> '+target[1].path)
|
||||||
|
act.append('echo \'#include <kdialog.h>\' >> '+target[1].path)
|
||||||
|
act.append('$QT_UIC $QT_UIC_CFLAGS -impl '+target[0].path+' -o '+target[1].path+'.tmp '+source[0].path)
|
||||||
|
act.append('cat '+target[1].path+'.tmp >> '+target[1].path)
|
||||||
|
act.append('rm -f '+target[1].path+'.tmp')
|
||||||
|
act.append('echo \'#include "' + target[2].name + '"\' >> '+target[1].path)
|
||||||
|
act.append('$QT_MOC -o '+target[2].path+' '+target[0].path)
|
||||||
|
return act
|
||||||
|
|
||||||
|
def uicEmitter(target, source, env):
|
||||||
|
adjustixes = SCons.Util.adjustixes
|
||||||
|
bs = SCons.Util.splitext(str(source[0].name))[0]
|
||||||
|
bs = os.path.join(str(target[0].get_dir()),bs)
|
||||||
|
# first target is automatically added by builder (.h file)
|
||||||
|
if len(target) < 2:
|
||||||
|
# second target is .cpp file
|
||||||
|
target.append(adjustixes(bs,
|
||||||
|
env.subst('$QT_UICIMPLPREFIX'),
|
||||||
|
env.subst('$QT_UICIMPLSUFFIX')))
|
||||||
|
if len(target) < 3:
|
||||||
|
# third target is .moc file
|
||||||
|
target.append(adjustixes(bs,
|
||||||
|
env.subst('$QT_MOCHPREFIX'),
|
||||||
|
env.subst('$QT_MOCHSUFFIX')))
|
||||||
|
return target, source
|
||||||
|
|
||||||
|
UIC_BUILDER = Builder(
|
||||||
|
generator = uicGenerator,
|
||||||
|
emitter = uicEmitter,
|
||||||
|
suffix = '.h',
|
||||||
|
src_suffix = '.ui' )
|
||||||
|
|
||||||
|
###### moc file processing
|
||||||
|
env['QT_MOCCOM'] = ('$QT_MOC -o ${TARGETS[0]} $SOURCE')
|
||||||
|
|
||||||
|
MOC_BUILDER = Builder(
|
||||||
|
action = '$QT_MOCCOM',
|
||||||
|
suffix = '.moc',
|
||||||
|
src_suffix = '.h' )
|
||||||
|
|
||||||
|
MOCCPP_BUILDER = Builder(
|
||||||
|
action = '$QT_MOCCOM',
|
||||||
|
suffix = '_moc.cpp',
|
||||||
|
src_suffix = '.h' )
|
||||||
|
|
||||||
|
###### kcfg file processing
|
||||||
|
def kcfgGenerator(target, source, env, for_signature):
|
||||||
|
act=[]
|
||||||
|
act.append('kconfig_compiler -d'+str(source[0].get_dir())+' '+source[1].path+' '+source[0].path)
|
||||||
|
return act
|
||||||
|
|
||||||
|
def kcfgEmitter(target, source, env):
|
||||||
|
adjustixes = SCons.Util.adjustixes
|
||||||
|
bs = SCons.Util.splitext(str(source[0].name))[0]
|
||||||
|
bs = os.path.join(str(target[0].get_dir()),bs)
|
||||||
|
# first target is automatically added by builder (.h file)
|
||||||
|
if len(target) < 2:
|
||||||
|
# second target is .cpp file
|
||||||
|
target.append(adjustixes(bs, env.subst('$KDE_KCFG_IMPLPREFIX'), env.subst('$KDE_KCFG_IMPL_CSUFFIX')))
|
||||||
|
|
||||||
|
if len(source) <2:
|
||||||
|
kcfgfilename = os.popen("cat "+str(source[0])+"|grep File|sed 's/File.*=//i'").read().rstrip()
|
||||||
|
source.append( str(source[0].get_dir())+'/'+kcfgfilename )
|
||||||
|
return target, source
|
||||||
|
|
||||||
|
KCFG_BUILDER = Builder(
|
||||||
|
generator = kcfgGenerator,
|
||||||
|
emitter = kcfgEmitter,
|
||||||
|
suffix = '.h',
|
||||||
|
src_suffix = '.kcfgc' )
|
||||||
|
|
||||||
|
###### dcop processing
|
||||||
|
def dcopGenerator(target, source, env, for_signature):
|
||||||
|
act=[]
|
||||||
|
act.append('dcopidl '+source[0].path+' > '+target[1].path+'|| ( rm -f '+target[1].path+' ; false )')
|
||||||
|
act.append('dcopidl2cpp --c++-suffix cpp --no-signals --no-stub '+target[1].path)
|
||||||
|
return act
|
||||||
|
|
||||||
|
def dcopEmitter(target, source, env):
|
||||||
|
bs = SCons.Util.splitext(str(source[0].name))[0]
|
||||||
|
bs = os.path.join(str(target[0].get_dir()),bs)
|
||||||
|
target.append(bs+'.kidl')
|
||||||
|
#target.append(bs+'_skel.cpp')
|
||||||
|
return target, source
|
||||||
|
|
||||||
|
DCOP_BUILDER = Builder(
|
||||||
|
generator = dcopGenerator,
|
||||||
|
emitter = dcopEmitter,
|
||||||
|
suffix = '_skel.cpp',
|
||||||
|
src_suffix = '.h' )
|
||||||
|
|
||||||
|
###### documentation (meinproc) processing
|
||||||
|
MEINPROC_BUILDER = Builder(
|
||||||
|
action = '$MEINPROC --check --cache $TARGET $SOURCE',
|
||||||
|
suffix = '.cache.bz2',
|
||||||
|
src_suffix = '.docbook' )
|
||||||
|
|
||||||
|
###### translation files builder
|
||||||
|
TRANSFILES_BUILDER = Builder(
|
||||||
|
action = '$MSGFMT $SOURCE -o $TARGET',
|
||||||
|
suffix = '.gmo',
|
||||||
|
src_suffix = '.po' )
|
||||||
|
|
||||||
|
###### libtool file builder
|
||||||
|
def laGenerator(target, source, env, for_signature):
|
||||||
|
act=[]
|
||||||
|
act.append('echo "dlname=\''+source[0].name+'\'" > '+target[0].path)
|
||||||
|
act.append('echo "library_names=\''+source[0].name+' '+source[0].name+' '+source[0].name+'\'" >> '+target[0].path)
|
||||||
|
act.append('echo "old_library=\'\'">> '+target[0].path)
|
||||||
|
act.append('echo "dependency_libs=\'\'">> '+target[0].path)
|
||||||
|
act.append('echo "current=0">> '+target[0].path)
|
||||||
|
act.append('echo "age=0">> '+target[0].path)
|
||||||
|
act.append('echo "revision=0">> '+target[0].path)
|
||||||
|
act.append('echo "installed=yes">> '+target[0].path)
|
||||||
|
act.append('echo "shouldnotlink=no">> '+target[0].path)
|
||||||
|
act.append('echo "dlopen=\'\'">> '+target[0].path)
|
||||||
|
act.append('echo "dlpreopen=\'\'">> '+target[0].path)
|
||||||
|
act.append('echo "libdir=\''+env['KDEMODULE']+'\'" >> '+target[0].path)
|
||||||
|
return act
|
||||||
|
|
||||||
|
LA_BUILDER = Builder(
|
||||||
|
generator = laGenerator,
|
||||||
|
suffix = '.la',
|
||||||
|
src_suffix = '.so' )
|
||||||
|
|
||||||
|
##### register the builders
|
||||||
|
env['BUILDERS']['Uic'] = UIC_BUILDER
|
||||||
|
env['BUILDERS']['Moc'] = MOC_BUILDER
|
||||||
|
env['BUILDERS']['Moccpp'] = MOCCPP_BUILDER
|
||||||
|
env['BUILDERS']['Dcop'] = DCOP_BUILDER
|
||||||
|
env['BUILDERS']['Kcfg'] = KCFG_BUILDER
|
||||||
|
env['BUILDERS']['LaFile'] = LA_BUILDER
|
||||||
|
env['BUILDERS']['Meinproc'] = MEINPROC_BUILDER
|
||||||
|
env['BUILDERS']['Transfiles'] = TRANSFILES_BUILDER
|
||||||
|
|
||||||
|
static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
|
||||||
|
static_obj.src_builder.append('Uic')
|
||||||
|
shared_obj.src_builder.append('Uic')
|
||||||
|
static_obj.src_builder.append('Kcfg')
|
||||||
|
shared_obj.src_builder.append('Kcfg')
|
||||||
|
static_obj.src_builder.append('LaFile')
|
||||||
|
shared_obj.src_builder.append('LaFile')
|
||||||
|
static_obj.src_builder.append('Meinproc')
|
||||||
|
shared_obj.src_builder.append('Meinproc')
|
||||||
|
static_obj.src_builder.append('Transfiles')
|
||||||
|
shared_obj.src_builder.append('Transfiles')
|
||||||
|
|
||||||
|
## find the files to moc, dcop, and link against kde and qt
|
||||||
|
env.AppendUnique(PROGEMITTER=[mocscan], SHLIBEMITTER=[mocscan], LIBEMITTER =[mocscan])
|
||||||
|
|
||||||
|
###########################################
|
||||||
|
## Handy helpers for building kde programs
|
||||||
|
## You should not have to modify them ..
|
||||||
|
|
||||||
|
#import SCons.Util
|
||||||
|
skel_ext = [".skel", ".SKEL"]
|
||||||
|
def KDEfiles(lenv, target, source):
|
||||||
|
""" Returns a list of files for scons (handles kde tricks like .skel)
|
||||||
|
It also makes custom checks against double includes like : ['file.ui', 'file.cpp']
|
||||||
|
(file.cpp is already included because of file.ui) """
|
||||||
|
|
||||||
|
src=[]
|
||||||
|
ui_files=[]
|
||||||
|
kcfg_files=[]
|
||||||
|
skel_files=[]
|
||||||
|
other_files=[]
|
||||||
|
|
||||||
|
# For each file, check wether it is a dcop file or not, and create the complete list of sources
|
||||||
|
for file in source:
|
||||||
|
bs = SCons.Util.splitext(file)[0]
|
||||||
|
ext = SCons.Util.splitext(file)[1]
|
||||||
|
if ext in skel_ext:
|
||||||
|
lenv.Dcop(bs+'.h')
|
||||||
|
src.append(bs+'_skel.cpp')
|
||||||
|
elif ext == ".moch":
|
||||||
|
lenv.Moccpp(bs+'.h')
|
||||||
|
src.append(bs+'_moc.cpp')
|
||||||
|
else:
|
||||||
|
src.append(file)
|
||||||
|
|
||||||
|
if ext == '.ui':
|
||||||
|
ui_files.append(bs)
|
||||||
|
elif ext == '.kcfgc':
|
||||||
|
kcfg_files.append(bs)
|
||||||
|
elif ext == '.skel':
|
||||||
|
skel_files.append(bs)
|
||||||
|
else:
|
||||||
|
other_files.append(bs)
|
||||||
|
return src
|
||||||
|
|
||||||
|
"""
|
||||||
|
In the future, these functions will contain the code that will dump the
|
||||||
|
configuration for re-use from an IDE
|
||||||
|
"""
|
||||||
|
import glob
|
||||||
|
def KDEinstall(lenv, restype, subdir, files):
|
||||||
|
if not 'install' in env['TARGS']:
|
||||||
|
return
|
||||||
|
basedir=env['DESTDIR']
|
||||||
|
if len(restype)>0:
|
||||||
|
if not lenv.has_key(restype):
|
||||||
|
print RED+"unknown resource type "+restype+NORMAL
|
||||||
|
else:
|
||||||
|
basedir += lenv[restype]+'/'
|
||||||
|
#print file # <- useful to trace stuff :)
|
||||||
|
install_list = env.Install(basedir+subdir, files)
|
||||||
|
env.Alias('install', install_list)
|
||||||
|
return install_list
|
||||||
|
|
||||||
|
def KDEinstallas(lenv, restype, destfile, file):
|
||||||
|
if not 'install' in env['TARGS']:
|
||||||
|
return
|
||||||
|
basedir=env['DESTDIR']
|
||||||
|
if len(restype)>0:
|
||||||
|
if not lenv.has_key(restype):
|
||||||
|
print RED+"unknown resource type "+restype+NORMAL
|
||||||
|
else:
|
||||||
|
basedir += lenv[restype]+'/'
|
||||||
|
install_list = env.InstallAs(basedir+destfile, file)
|
||||||
|
env.Alias('install', install_list)
|
||||||
|
return install_list
|
||||||
|
|
||||||
|
def KDEprogram(lenv, target, source):
|
||||||
|
""" Makes a kde program
|
||||||
|
The program is installed except if one sets env['NOAUTOINSTALL'] """
|
||||||
|
src = KDEfiles(lenv, target, source)
|
||||||
|
program_list = lenv.Program(target, src)
|
||||||
|
if not lenv.has_key('NOAUTOINSTALL'):
|
||||||
|
KDEinstall(lenv, 'KDEBIN', '', target)
|
||||||
|
return program_list
|
||||||
|
|
||||||
|
def KDEshlib(lenv, target, source, kdelib=0):
|
||||||
|
""" Makes a shared library for kde (.la file for klibloader)
|
||||||
|
The library is installed except if one sets env['NOAUTOINSTALL'] """
|
||||||
|
src = KDEfiles(lenv, target, source)
|
||||||
|
library_list = lenv.SharedLibrary(target, src)
|
||||||
|
lafile_list = lenv.LaFile(target, library_list)
|
||||||
|
if not lenv.has_key('NOAUTOINSTALL'):
|
||||||
|
install_dir = 'KDEMODULE'
|
||||||
|
if kdelib==1:
|
||||||
|
install_dir = 'KDELIBPATH'
|
||||||
|
KDEinstall(lenv, install_dir, '', library_list)
|
||||||
|
KDEinstall(lenv, install_dir, '', lafile_list)
|
||||||
|
return library_list
|
||||||
|
|
||||||
|
def KDEstaticlib(lenv, target, source):
|
||||||
|
""" Makes a static library for kde - in practice you should not use static libraries
|
||||||
|
1. they take more memory than shared ones
|
||||||
|
2. makefile.am needed it because of limitations
|
||||||
|
(cannot handle sources in separate folders - takes extra processing) """
|
||||||
|
src = KDEfiles(lenv, target, source)
|
||||||
|
return lenv.StaticLibrary(target, src)
|
||||||
|
# do not install static libraries by default
|
||||||
|
|
||||||
|
def KDEaddflags_cxx(lenv, fl):
|
||||||
|
""" Compilation flags for C++ programs """
|
||||||
|
lenv.AppendUnique(CXXFLAGS = fl)
|
||||||
|
|
||||||
|
def KDEaddflags_c(lenv, fl):
|
||||||
|
""" Compilation flags for C programs """
|
||||||
|
lenv.AppendUnique(CFLAGS = fl)
|
||||||
|
|
||||||
|
def KDEaddflags_link(lenv, fl):
|
||||||
|
""" Add link flags - Use this if KDEaddlibs below is not enough """
|
||||||
|
lenv.AppendUnique(LINKFLAGS = fl)
|
||||||
|
|
||||||
|
def KDEaddlibs(lenv, libs):
|
||||||
|
""" Helper function """
|
||||||
|
lenv.AppendUnique(LIBS = libs)
|
||||||
|
|
||||||
|
def KDEaddpaths_includes(lenv, paths):
|
||||||
|
""" Add new include paths """
|
||||||
|
lenv.AppendUnique(CPPPATH = paths)
|
||||||
|
|
||||||
|
def KDEaddpaths_libs(lenv, paths):
|
||||||
|
""" Add paths to libraries """
|
||||||
|
lenv.AppendUnique(LIBPATH = paths)
|
||||||
|
|
||||||
|
def KDElang(lenv, folder, appname):
|
||||||
|
""" Process translations (.po files) in a po/ dir """
|
||||||
|
transfiles = glob.glob(folder+'/*.po')
|
||||||
|
for lang in transfiles:
|
||||||
|
result = lenv.Transfiles(lang)
|
||||||
|
country = SCons.Util.splitext(result[0].name)[0]
|
||||||
|
KDEinstallas(lenv, 'KDELOCALE', country+'/LC_MESSAGES/'+appname+'.mo', result)
|
||||||
|
|
||||||
|
def KDEicon(lenv, icname):
|
||||||
|
""" Emulates the behaviour of Makefile.am to install icons
|
||||||
|
Contributed by: "Andrey Golovizin" <grooz@gorodok@net> """
|
||||||
|
type_dic = { 'action' : 'actions', 'app' : 'apps', 'device' :
|
||||||
|
'devices', 'filesys' : 'filesystems', 'mime' : 'mimetypes' }
|
||||||
|
dir_dic = {
|
||||||
|
'los' :'locolor/16x16',
|
||||||
|
'lom' :'locolor/32x32',
|
||||||
|
'him' :'hicolor/32x32',
|
||||||
|
'hil' :'hicolor/48x48',
|
||||||
|
'lo16' :'locolor/16x16',
|
||||||
|
'lo22' :'locolor/22x22',
|
||||||
|
'lo32' :'locolor/32x32',
|
||||||
|
'hi16' :'hicolor/16x16',
|
||||||
|
'hi22' :'hicolor/22x22',
|
||||||
|
'hi32' :'hicolor/32x32',
|
||||||
|
'hi48' :'hicolor/48x48',
|
||||||
|
'hi64' :'hicolor/64x64',
|
||||||
|
'hi128':'hicolor/128x128',
|
||||||
|
'hisc' :'hicolor/scalable',
|
||||||
|
'cr16' :'crystalsvg/16x16',
|
||||||
|
'cr22' :'crystalsvg/22x22',
|
||||||
|
'cr32' :'crystalsvg/32x32',
|
||||||
|
'cr48' :'crystalsvg/48x48',
|
||||||
|
'cr64' :'crystalsvg/64x64',
|
||||||
|
'cr128':'crystalsvg/128x128',
|
||||||
|
'crsc' :'crystalsvg/scalable'
|
||||||
|
}
|
||||||
|
|
||||||
|
import glob
|
||||||
|
iconfiles = []
|
||||||
|
for ext in ['png', 'xpm', 'mng', 'svg', 'svgz']:
|
||||||
|
files = glob.glob('*-*-%s.%s' % (icname, ext))
|
||||||
|
iconfiles += files
|
||||||
|
for iconfile in iconfiles:
|
||||||
|
tmp = iconfile.split('-')
|
||||||
|
if len(tmp) != 3:
|
||||||
|
print RED + 'WARNING: icon filename has unknown format: ' + iconfile + NORMAL
|
||||||
|
continue
|
||||||
|
[icon_dir, icon_type, icon_filename] = tmp
|
||||||
|
try:
|
||||||
|
destfile = '%s/%s/%s/%s' % (lenv['KDEICONS'], dir_dic[icon_dir], type_dic[icon_type], icon_filename)
|
||||||
|
except KeyError:
|
||||||
|
print RED + 'WARNING: unknown icon type: ' + iconfile + NORMAL
|
||||||
|
continue
|
||||||
|
## do not use KDEinstallas here, as parsing from an ide will be necessary
|
||||||
|
if 'install' in env['TARGS']:
|
||||||
|
env.Alias('install', env.InstallAs( env['DESTDIR']+'/'+destfile, iconfile ) )
|
||||||
|
|
||||||
|
# Attach the functions to the environment so that sconscripts can use them
|
||||||
|
from SCons.Script.SConscript import SConsEnvironment
|
||||||
|
SConsEnvironment.KDEprogram = KDEprogram
|
||||||
|
SConsEnvironment.KDEshlib = KDEshlib
|
||||||
|
SConsEnvironment.KDEstaticlib = KDEstaticlib
|
||||||
|
SConsEnvironment.KDEinstall = KDEinstall
|
||||||
|
SConsEnvironment.KDEinstallas = KDEinstallas
|
||||||
|
SConsEnvironment.KDElang = KDElang
|
||||||
|
SConsEnvironment.KDEicon = KDEicon
|
||||||
|
|
||||||
|
SConsEnvironment.KDEaddflags_cxx = KDEaddflags_cxx
|
||||||
|
SConsEnvironment.KDEaddflags_c = KDEaddflags_c
|
||||||
|
SConsEnvironment.KDEaddflags_link = KDEaddflags_link
|
||||||
|
SConsEnvironment.KDEaddlibs = KDEaddlibs
|
||||||
|
SConsEnvironment.KDEaddpaths_includes = KDEaddpaths_includes
|
||||||
|
SConsEnvironment.KDEaddpaths_libs = KDEaddpaths_libs
|
@ -0,0 +1,83 @@
|
|||||||
|
#! /usr/bin/env python
|
||||||
|
## This script demonstrates to build and install
|
||||||
|
## the documentation of a kde program with scons
|
||||||
|
##
|
||||||
|
## Thomas Nagy, 2005
|
||||||
|
|
||||||
|
## This file can be reused freely for any project (see COPYING)
|
||||||
|
|
||||||
|
## First load the environment set in the top-level SConstruct file
|
||||||
|
Import( 'env' )
|
||||||
|
myenv=env.Copy()
|
||||||
|
|
||||||
|
## The following looks complicated but it is not
|
||||||
|
## We first define a function to install all files as documentation
|
||||||
|
## The documentation is of course lying in subfolders from here
|
||||||
|
## * normal files are installed under KDEDOC/destination
|
||||||
|
## * meinproc files are not installed, but processed into a single
|
||||||
|
## index.cache.bz2 which is installed afterwards
|
||||||
|
|
||||||
|
## This is far more maintainable to have *one* file than
|
||||||
|
## having lots of almost empty SConscript in several folders
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import glob
|
||||||
|
import SCons.Util
|
||||||
|
|
||||||
|
## Define this to 1 if you are writing documentation else to 0 :)
|
||||||
|
i_am_a_documentation_writer = 0
|
||||||
|
|
||||||
|
## This function uses env imported above
|
||||||
|
def processfolder(folder, lang, destination=""):
|
||||||
|
# folder is the folder to process
|
||||||
|
# lang is the language
|
||||||
|
# destination is the subdirectory in KDEDOC
|
||||||
|
|
||||||
|
docfiles = glob.glob(folder+"/???*.*") # file files that are at least 4 chars wide :)
|
||||||
|
|
||||||
|
# warn about errors
|
||||||
|
#if len(lang) != 2:
|
||||||
|
# print "error, lang must be a two-letter string, like 'en'"
|
||||||
|
|
||||||
|
# when the destination is not given, use the folder
|
||||||
|
if len(destination) == 0:
|
||||||
|
destination=folder
|
||||||
|
|
||||||
|
docbook_list = []
|
||||||
|
for file in docfiles:
|
||||||
|
|
||||||
|
# do not process folders
|
||||||
|
if not os.path.isfile(file):
|
||||||
|
continue
|
||||||
|
# do not process the cache file
|
||||||
|
if file == 'index.cache.bz2':
|
||||||
|
continue
|
||||||
|
# ignore invalid files (TODO??)
|
||||||
|
if len( SCons.Util.splitext( file ) ) <= 1 :
|
||||||
|
continue
|
||||||
|
|
||||||
|
ext = SCons.Util.splitext( file )[1]
|
||||||
|
|
||||||
|
# docbook files are processed by meinproc
|
||||||
|
if ext == '.docbook':
|
||||||
|
docbook_list.append( file )
|
||||||
|
continue
|
||||||
|
|
||||||
|
myenv.KDEinstall('KDEDOC', lang+'/'+destination, file)
|
||||||
|
|
||||||
|
# Now process the index.docbook files ..
|
||||||
|
if len(docbook_list) == 0:
|
||||||
|
return
|
||||||
|
if not os.path.isfile( folder+'index.docbook' ):
|
||||||
|
print "Error, index.docbook was not found in "+folder+'/index.docbook'
|
||||||
|
return
|
||||||
|
if i_am_a_documentation_writer:
|
||||||
|
for file in docbook_list:
|
||||||
|
myenv.Depends( folder+'index.cache.bz2', file )
|
||||||
|
myenv.Meinproc( folder+'/index.cache.bz2', folder+'/index.docbook' )
|
||||||
|
myenv.KDEinstall( 'KDEDOC', lang+'/'+destination, folder+'/index.cache.bz2' )
|
||||||
|
|
||||||
|
## Use processfolder for each documentation directory
|
||||||
|
processfolder('en/', 'en')
|
||||||
|
|
@ -0,0 +1,101 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.0//EN" "dtd/kdex.dtd" [
|
||||||
|
<!ENTITY kappname "&KStreamRipper;">
|
||||||
|
<!ENTITY % addindex "IGNORE">
|
||||||
|
<!ENTITY % English "INCLUDE" > <!-- change language only here -->
|
||||||
|
]>
|
||||||
|
<!-- Important note: please use template.docbook instead of this file.
|
||||||
|
This is only the conversion of app.sgml into DocBook SGML.
|
||||||
|
template.docbook gives you more information on what you can and
|
||||||
|
should do. Thanks. -->
|
||||||
|
|
||||||
|
<book lang="&language;">
|
||||||
|
|
||||||
|
<bookinfo>
|
||||||
|
<title>The KStreamRipper Handbook</title>
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<firstname></firstname>
|
||||||
|
<surname>Michael Goettsche</surname>
|
||||||
|
<affiliation><address><email>mail@tuxipuxi.de</email></address></affiliation>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
<date>date</date>
|
||||||
|
<releaseinfo>0.1</releaseinfo>
|
||||||
|
<abstract>
|
||||||
|
<para>SHORT DESCRIPTION GOES HERE</para>
|
||||||
|
</abstract>
|
||||||
|
<keywordset>
|
||||||
|
<keyword>KDE</keyword>
|
||||||
|
<keyword>KStreamRipper</keyword>
|
||||||
|
</keywordset>
|
||||||
|
</bookinfo>
|
||||||
|
|
||||||
|
<chapter id="introduction">
|
||||||
|
<title>Introduction</title>
|
||||||
|
|
||||||
|
<sect1 id="features">
|
||||||
|
<title>Features</title>
|
||||||
|
<para></para>
|
||||||
|
</sect1>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="installation">
|
||||||
|
<title>Installation</title>
|
||||||
|
|
||||||
|
<sect1 id="how-to-obtain-KStreamRipper">
|
||||||
|
<title>How to obtain KStreamRipper</title>
|
||||||
|
<para></para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="requirements">
|
||||||
|
<title>Requirements</title>
|
||||||
|
<para></para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="compilation-and-installation">
|
||||||
|
<title>Compilation and Installation</title>
|
||||||
|
|
||||||
|
<para>Compiling KStreamRipper is very easy. The following should do
|
||||||
|
it: <screen>
|
||||||
|
<prompt>%</prompt> <userinput><command>./configure</command></userinput>
|
||||||
|
<prompt>%</prompt> <userinput><command>make</command></userinput>
|
||||||
|
<prompt>%</prompt> <userinput><command>make</command> install</userinput></screen>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>That should do it! Should you run into any problems,
|
||||||
|
please report them to the <ulink
|
||||||
|
url="mailto:mail@tuxipuxi.de">author</ulink></para>
|
||||||
|
</sect1>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="using-KStreamRipper">
|
||||||
|
<title>Using KStreamRipper</title>
|
||||||
|
<para></para>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="questionsanswersandtips">
|
||||||
|
<title>Questions, Answers, and Tips</title>
|
||||||
|
|
||||||
|
<qandaset id="faq">
|
||||||
|
<title>Frequently asked questions</title>
|
||||||
|
<qandaentry>
|
||||||
|
<question>
|
||||||
|
<para>Question 1</para>
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<para>The answer</para>
|
||||||
|
</answer>
|
||||||
|
</qandaentry>
|
||||||
|
</qandaset>
|
||||||
|
|
||||||
|
</chapter>
|
||||||
|
</book>
|
||||||
|
<!--
|
||||||
|
Local Variables:
|
||||||
|
mode: sgml
|
||||||
|
sgml-omittag: nil
|
||||||
|
sgml-shorttag: t
|
||||||
|
sgml-general-insert-case: lower
|
||||||
|
End:
|
||||||
|
-->
|
@ -0,0 +1,816 @@
|
|||||||
|
# Made from scons qt.py and (heavily) modified into kde.py
|
||||||
|
# Thomas Nagy, 2004, 2005 <tnagy2^8@yahoo.fr>
|
||||||
|
|
||||||
|
"""
|
||||||
|
Run scons -h to display the associated help, or look below ..
|
||||||
|
"""
|
||||||
|
|
||||||
|
BOLD ="\033[1m"
|
||||||
|
RED ="\033[91m"
|
||||||
|
GREEN ="\033[92m"
|
||||||
|
YELLOW ="\033[1m" #"\033[93m" # unreadable on white backgrounds
|
||||||
|
CYAN ="\033[96m"
|
||||||
|
NORMAL ="\033[0m"
|
||||||
|
|
||||||
|
import os, re
|
||||||
|
|
||||||
|
# Returns the name of the shared object (i.e. libkdeui.so.4)
|
||||||
|
# referenced by a libtool archive (like libkdeui.la)
|
||||||
|
def getSOfromLA(lafile):
|
||||||
|
contents = open(lafile, 'r').read()
|
||||||
|
match = re.search("^dlname='([^']*)'$", contents, re.M)
|
||||||
|
if match:
|
||||||
|
return match.group(1)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def exists(env):
|
||||||
|
return True
|
||||||
|
|
||||||
|
def detect_kde(env):
|
||||||
|
""" Detect the qt and kde environment using kde-config mostly """
|
||||||
|
|
||||||
|
prefix = env['ARGS'].get('prefix', None)
|
||||||
|
execprefix = env['ARGS'].get('execprefix', None)
|
||||||
|
datadir = env['ARGS'].get('datadir', None)
|
||||||
|
libdir = env['ARGS'].get('libdir', None)
|
||||||
|
libsuffix = env['ARGS'].get('libsuffix', '')
|
||||||
|
kdeincludes = env['ARGS'].get('kdeincludes', None)
|
||||||
|
kdelibs = env['ARGS'].get('kdelibs', None)
|
||||||
|
qtincludes = env['ARGS'].get('qtincludes', None)
|
||||||
|
qtlibs = env['ARGS'].get('qtlibs', None)
|
||||||
|
|
||||||
|
if libdir:
|
||||||
|
libdir = libdir+libsuffix
|
||||||
|
|
||||||
|
## Detect the kde libraries
|
||||||
|
print "Checking for kde-config : ",
|
||||||
|
kde_config = os.popen("which kde-config 2>/dev/null").read().strip()
|
||||||
|
if len(kde_config):
|
||||||
|
print GREEN+"kde-config was found"+NORMAL
|
||||||
|
else:
|
||||||
|
print RED+"kde-config was NOT found in your PATH"+NORMAL
|
||||||
|
print "Make sure kde is installed properly"
|
||||||
|
print "(missing package kdebase-devel?)"
|
||||||
|
env.Exit(1)
|
||||||
|
env['KDEDIR'] = os.popen('kde-config -prefix').read().strip()
|
||||||
|
|
||||||
|
print "Checking for kde version : ",
|
||||||
|
kde_version = os.popen("kde-config --version|grep KDE").read().strip().split()[1]
|
||||||
|
try:
|
||||||
|
env['KDEm1']=int(kde_version[0])
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
env['KDEm2']=int(kde_version[2])
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
env['KDEm3']=int(kde_version[4])
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
if int(kde_version[0]) != 3 or int(kde_version[2]) < 2:
|
||||||
|
print RED+kde_version
|
||||||
|
print RED+"Your kde version can be too old"+NORMAL
|
||||||
|
print RED+"Please make sure kde is at least 3.2"+NORMAL
|
||||||
|
else:
|
||||||
|
print GREEN+kde_version+NORMAL
|
||||||
|
|
||||||
|
## Detect the qt library
|
||||||
|
print "Checking for the qt library : ",
|
||||||
|
qtdir = os.getenv("QTDIR")
|
||||||
|
if qtdir:
|
||||||
|
print GREEN+"qt is in "+qtdir+NORMAL
|
||||||
|
else:
|
||||||
|
libdir = os.popen('kde-config --expandvars --install lib').read().strip()
|
||||||
|
libkdeuiSO = libdir+'/'+getSOfromLA(libdir+'/libkdeui.la')
|
||||||
|
m = re.search('(.*)/lib/libqt.*', os.popen('ldd ' + libkdeuiSO + ' | grep libqt').read().strip().split()[2])
|
||||||
|
if m:
|
||||||
|
qtdir = m.group(1)
|
||||||
|
print YELLOW+"qt was found as "+m.group(1)+NORMAL
|
||||||
|
else:
|
||||||
|
print RED+"qt was not found"+NORMAL
|
||||||
|
print RED+"Please set QTDIR first (/usr/lib/qt3?)"+NORMAL
|
||||||
|
env.Exit(1)
|
||||||
|
env['QTDIR'] = qtdir.strip()
|
||||||
|
|
||||||
|
## Find the necessary programs uic and moc
|
||||||
|
print "Checking for uic : ",
|
||||||
|
uic = qtdir + "/bin/uic"
|
||||||
|
if os.path.isfile(uic):
|
||||||
|
print GREEN+"uic was found as "+uic+NORMAL
|
||||||
|
else:
|
||||||
|
uic = os.popen("which uic 2>/dev/null").read().strip()
|
||||||
|
if len(uic):
|
||||||
|
print YELLOW+"uic was found as "+uic+NORMAL
|
||||||
|
else:
|
||||||
|
uic = os.popen("which uic 2>/dev/null").read().strip()
|
||||||
|
if len(uic):
|
||||||
|
print YELLOW+"uic was found as "+uic+NORMAL
|
||||||
|
else:
|
||||||
|
print RED+"uic was not found - set QTDIR put it in your PATH ?"+NORMAL
|
||||||
|
env.Exit(1)
|
||||||
|
env['QT_UIC'] = uic
|
||||||
|
|
||||||
|
print "Checking for moc : ",
|
||||||
|
moc = qtdir + "/bin/moc"
|
||||||
|
if os.path.isfile(moc):
|
||||||
|
print GREEN + "moc was found as " + moc + NORMAL
|
||||||
|
else:
|
||||||
|
moc = os.popen("which moc 2>/dev/null").read().strip()
|
||||||
|
if len(moc):
|
||||||
|
print YELLOW + "moc was found as " + moc + NORMAL
|
||||||
|
elif os.path.isfile("/usr/share/qt3/bin/moc"):
|
||||||
|
moc = "/usr/share/qt3/bin/moc"
|
||||||
|
print YELLOW + "moc was found as " + moc + NORMAL
|
||||||
|
else:
|
||||||
|
print RED + "moc was not found - set QTDIR or put it in your PATH ?" + NORMAL
|
||||||
|
env.Exit(1)
|
||||||
|
env['QT_MOC'] = moc
|
||||||
|
|
||||||
|
## check for the qt and kde includes
|
||||||
|
print "Checking for the qt includes : ",
|
||||||
|
if qtincludes and os.path.isfile(qtincludes + "/qlayout.h"):
|
||||||
|
# The user told where to look for and it looks valid
|
||||||
|
print GREEN + "ok " + qtincludes + NORMAL
|
||||||
|
else:
|
||||||
|
if os.path.isfile(qtdir + "/include/qlayout.h"):
|
||||||
|
# Automatic detection
|
||||||
|
print GREEN + "ok " + qtdir + "/include/ " + NORMAL
|
||||||
|
qtincludes = qtdir + "/include/"
|
||||||
|
elif os.path.isfile("/usr/include/qt3/qlayout.h"):
|
||||||
|
# Debian probably
|
||||||
|
print YELLOW + "the qt headers were found in /usr/include/qt3/ " + NORMAL
|
||||||
|
qtincludes = "/usr/include/qt3"
|
||||||
|
else:
|
||||||
|
print RED + "the qt headers were not found" + NORMAL
|
||||||
|
env.Exit(1)
|
||||||
|
|
||||||
|
print "Checking for the kde includes : ",
|
||||||
|
kdeprefix = os.popen("kde-config --prefix").read().strip()
|
||||||
|
if not kdeincludes:
|
||||||
|
kdeincludes = kdeprefix+"/include/"
|
||||||
|
if os.path.isfile(kdeincludes + "/klineedit.h"):
|
||||||
|
print GREEN + "ok " + kdeincludes + NORMAL
|
||||||
|
else:
|
||||||
|
if os.path.isfile(kdeprefix+"/include/kde/klineedit.h"):
|
||||||
|
# Debian, Fedora probably
|
||||||
|
print YELLOW + "the kde headers were found in " + kdeprefix + "/include/kde/" + NORMAL
|
||||||
|
kdeincludes = kdeprefix + "/include/kde/"
|
||||||
|
else:
|
||||||
|
print RED + "The kde includes were NOT found" + NORMAL
|
||||||
|
env.Exit(1)
|
||||||
|
|
||||||
|
if prefix:
|
||||||
|
## use the user-specified prefix
|
||||||
|
if not execprefix:
|
||||||
|
execprefix = prefix
|
||||||
|
if not datadir:
|
||||||
|
datadir=prefix+"/share"
|
||||||
|
if not libdir:
|
||||||
|
libdir=execprefix+"/lib"+libsuffix
|
||||||
|
|
||||||
|
subst_vars = lambda x: x.replace('${exec_prefix}', execprefix).replace('${datadir}',datadir).replace('${libdir}', libdir)
|
||||||
|
debian_fix = lambda x: x.replace('/usr/share', '${datadir}')
|
||||||
|
env['KDEBIN'] = subst_vars(os.popen('kde-config --install exe').read().strip())
|
||||||
|
env['KDEAPPS'] = subst_vars(os.popen('kde-config --install apps').read().strip())
|
||||||
|
env['KDEDATA'] = subst_vars(os.popen('kde-config --install data').read().strip())
|
||||||
|
env['KDEMODULE']= subst_vars(os.popen('kde-config --install module').read().strip())
|
||||||
|
env['KDELOCALE']= subst_vars(os.popen('kde-config --install locale').read().strip())
|
||||||
|
env['KDEDOC'] = subst_vars( debian_fix(os.popen('kde-config --install html').read().strip()) )
|
||||||
|
env['KDEKCFG'] = subst_vars(os.popen('kde-config --install kcfg').read().strip())
|
||||||
|
env['KDEXDG'] = subst_vars(os.popen('kde-config --install xdgdata-apps').read().strip())
|
||||||
|
env['KDEXDGDIR']= subst_vars(os.popen('kde-config --install xdgdata-dirs').read().strip())
|
||||||
|
env['KDEMENU'] = subst_vars(os.popen('kde-config --install apps').read().strip())
|
||||||
|
env['KDEMIME'] = subst_vars(os.popen('kde-config --install mime').read().strip())
|
||||||
|
env['KDEICONS'] = subst_vars(os.popen('kde-config --install icon').read().strip())
|
||||||
|
env['KDESERV'] = subst_vars(os.popen('kde-config --install services').read().strip())
|
||||||
|
else:
|
||||||
|
# the user has given no prefix, install as a normal kde app
|
||||||
|
env['PREFIX'] = os.popen('kde-config --prefix').read().strip()
|
||||||
|
env['KDEBIN'] = os.popen('kde-config --expandvars --install exe').read().strip()
|
||||||
|
env['KDEAPPS'] = os.popen('kde-config --expandvars --install apps').read().strip()
|
||||||
|
env['KDEDATA'] = os.popen('kde-config --expandvars --install data').read().strip()
|
||||||
|
env['KDEMODULE']= os.popen('kde-config --expandvars --install module').read().strip()
|
||||||
|
env['KDELOCALE']= os.popen('kde-config --expandvars --install locale').read().strip()
|
||||||
|
env['KDEDOC'] = os.popen('kde-config --expandvars --install html').read().strip()
|
||||||
|
env['KDEKCFG'] = os.popen('kde-config --expandvars --install kcfg').read().strip()
|
||||||
|
env['KDEXDG'] = os.popen('kde-config --expandvars --install xdgdata-apps').read().strip()
|
||||||
|
env['KDEXDGDIR']= os.popen('kde-config --expandvars --install xdgdata-dirs').read().strip()
|
||||||
|
env['KDEMENU'] = os.popen('kde-config --expandvars --install apps').read().strip()
|
||||||
|
env['KDEMIME'] = os.popen('kde-config --expandvars --install mime').read().strip()
|
||||||
|
env['KDEICONS'] = os.popen('kde-config --expandvars --install icon').read().strip()
|
||||||
|
env['KDESERV'] = os.popen('kde-config --expandvars --install services').read().strip()
|
||||||
|
|
||||||
|
env['QTPLUGINS']=os.popen('kde-config --expandvars --install qtplugins').read().strip()
|
||||||
|
|
||||||
|
## kde libs and includes
|
||||||
|
env['KDEINCLUDEPATH']=kdeincludes
|
||||||
|
if not kdelibs:
|
||||||
|
kdelibs=os.popen('kde-config --expandvars --install lib').read().strip()
|
||||||
|
env['KDELIBPATH']=kdelibs
|
||||||
|
|
||||||
|
## qt libs and includes
|
||||||
|
env['QTINCLUDEPATH']=qtincludes
|
||||||
|
if not qtlibs:
|
||||||
|
qtlibs=qtdir+"/lib"
|
||||||
|
env['QTLIBPATH']=qtlibs
|
||||||
|
|
||||||
|
def generate(env):
|
||||||
|
""""Set up the qt and kde environment and builders - the moc part is difficult to understand """
|
||||||
|
env.Help("""
|
||||||
|
"""+BOLD+
|
||||||
|
"""*** KDE options ***
|
||||||
|
-------------------"""
|
||||||
|
+NORMAL+"""
|
||||||
|
"""+BOLD+"""* prefix """+NORMAL+""": base install path, ie: /usr/local
|
||||||
|
"""+BOLD+"""* execprefix """+NORMAL+""": install path for binaries, ie: /usr/bin
|
||||||
|
"""+BOLD+"""* datadir """+NORMAL+""": install path for the data, ie: /usr/local/share
|
||||||
|
"""+BOLD+"""* libdir """+NORMAL+""": install path for the libs, ie: /usr/lib
|
||||||
|
"""+BOLD+"""* libsuffix """+NORMAL+""": suffix of libraries on amd64, ie: 64, 32
|
||||||
|
"""+BOLD+"""* kdeincludes"""+NORMAL+""": path to the kde includes (/usr/include/kde on debian, ...)
|
||||||
|
"""+BOLD+"""* qtincludes """+NORMAL+""": same punishment, for qt includes (/usr/include/qt on debian, ...)
|
||||||
|
"""+BOLD+"""* kdelibs """+NORMAL+""": path to the kde libs, for linking the programs
|
||||||
|
"""+BOLD+"""* qtlibs """+NORMAL+""": same punishment, for qt libraries
|
||||||
|
ie: """+BOLD+"""scons configure libdir=/usr/local/lib qtincludes=/usr/include/qt
|
||||||
|
"""+NORMAL)
|
||||||
|
|
||||||
|
import SCons.Defaults
|
||||||
|
import SCons.Tool
|
||||||
|
import SCons.Util
|
||||||
|
|
||||||
|
ui_extensions = [".ui"]
|
||||||
|
header_extensions = [".h", ".hxx", ".hpp", ".hh"]
|
||||||
|
source_extensions = [".cpp", ".cxx", ".cc"]
|
||||||
|
|
||||||
|
def find_file(filename, paths, node_factory):
|
||||||
|
retval = None
|
||||||
|
for dir in paths:
|
||||||
|
node = node_factory(filename, dir)
|
||||||
|
if node.rexists():
|
||||||
|
return node
|
||||||
|
return None
|
||||||
|
|
||||||
|
class _Metasources:
|
||||||
|
""" Callable class, which works as an emitter for Programs, SharedLibraries
|
||||||
|
and StaticLibraries."""
|
||||||
|
|
||||||
|
def __init__(self, objBuilderName):
|
||||||
|
self.objBuilderName = objBuilderName
|
||||||
|
|
||||||
|
def __call__(self, target, source, env):
|
||||||
|
""" Smart autoscan function. Gets the list of objects for the Program
|
||||||
|
or Lib. Adds objects and builders for the special qt files. """
|
||||||
|
try:
|
||||||
|
if int(env.subst('$QT_AUTOSCAN')) == 0:
|
||||||
|
return target, source
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
qtdebug = int(env.subst('$QT_DEBUG'))
|
||||||
|
except ValueError:
|
||||||
|
qtdebug = 0
|
||||||
|
|
||||||
|
# some shortcuts used in the scanner
|
||||||
|
FS = SCons.Node.FS.default_fs
|
||||||
|
splitext = SCons.Util.splitext
|
||||||
|
objBuilder = getattr(env, self.objBuilderName)
|
||||||
|
|
||||||
|
# some regular expressions:
|
||||||
|
# Q_OBJECT detection
|
||||||
|
q_object_search = re.compile(r'[^A-Za-z0-9]Q_OBJECT[^A-Za-z0-9]')
|
||||||
|
|
||||||
|
# The following is kind of hacky to get builders working properly (FIXME) ??
|
||||||
|
objBuilderEnv = objBuilder.env
|
||||||
|
objBuilder.env = env
|
||||||
|
mocBuilderEnv = env.Moc.env
|
||||||
|
env.Moc.env = env
|
||||||
|
|
||||||
|
# make a deep copy for the result; MocH objects will be appended
|
||||||
|
out_sources = source[:]
|
||||||
|
|
||||||
|
for obj in source:
|
||||||
|
if not obj.has_builder():
|
||||||
|
# binary obj file provided
|
||||||
|
if qtdebug:
|
||||||
|
print "scons: qt: '%s' seems to be a binary. Discarded." % str(obj)
|
||||||
|
continue
|
||||||
|
cpp = obj.sources[0]
|
||||||
|
if not splitext(str(cpp))[1] in source_extensions:
|
||||||
|
if qtdebug:
|
||||||
|
print "scons: qt: '%s' is no cxx file. Discarded." % str(cpp)
|
||||||
|
# c or fortran source
|
||||||
|
continue
|
||||||
|
#cpp_contents = comment.sub('', cpp.get_contents())
|
||||||
|
cpp_contents = cpp.get_contents()
|
||||||
|
|
||||||
|
h = None
|
||||||
|
ui = None
|
||||||
|
|
||||||
|
for ui_ext in ui_extensions:
|
||||||
|
# try to find the ui file in the corresponding source directory
|
||||||
|
uiname = splitext(cpp.name)[0] + ui_ext
|
||||||
|
ui = find_file(uiname, (cpp.get_dir(),), FS.File)
|
||||||
|
if ui:
|
||||||
|
if qtdebug:
|
||||||
|
print "scons: qt: found .ui file of header" #% (str(h), str(cpp))
|
||||||
|
#h_contents = comment.sub('', h.get_contents())
|
||||||
|
break
|
||||||
|
|
||||||
|
# if we have a .ui file, do not continue, it is automatically handled by Uic
|
||||||
|
if ui:
|
||||||
|
continue
|
||||||
|
|
||||||
|
for h_ext in header_extensions:
|
||||||
|
# try to find the header file in the corresponding source
|
||||||
|
# directory
|
||||||
|
hname = splitext(cpp.name)[0] + h_ext
|
||||||
|
h = find_file(hname, (cpp.get_dir(),), FS.File)
|
||||||
|
if h:
|
||||||
|
if qtdebug:
|
||||||
|
print "scons: qt: Scanning '%s' (header of '%s')" % (str(h), str(cpp))
|
||||||
|
#h_contents = comment.sub('', h.get_contents())
|
||||||
|
h_contents = h.get_contents()
|
||||||
|
break
|
||||||
|
|
||||||
|
if not h and qtdebug:
|
||||||
|
print "scons: qt: no header for '%s'." % (str(cpp))
|
||||||
|
if h and q_object_search.search(h_contents):
|
||||||
|
# h file with the Q_OBJECT macro found -> add .moc or _moc.cpp file
|
||||||
|
moc_cpp = None
|
||||||
|
|
||||||
|
if env.has_key('NOMOCSCAN'):
|
||||||
|
moc_cpp = env.Moc(h)
|
||||||
|
else:
|
||||||
|
reg = '\n\s*#include\s*("|<)'+splitext(cpp.name)[0]+'.moc("|>)'
|
||||||
|
meta_object_search = re.compile(reg)
|
||||||
|
if meta_object_search.search(cpp_contents):
|
||||||
|
moc_cpp = env.Moc(h)
|
||||||
|
else:
|
||||||
|
moc_cpp = env.Moccpp(h)
|
||||||
|
moc_o = objBuilder(moc_cpp)
|
||||||
|
out_sources.append(moc_o)
|
||||||
|
if qtdebug:
|
||||||
|
print "scons: qt: found Q_OBJECT macro in '%s', moc'ing to '%s'" % (str(h), str(moc_cpp[0]))
|
||||||
|
|
||||||
|
if cpp and q_object_search.search(cpp_contents):
|
||||||
|
print "error, bksys cannot handle cpp files with Q_OBJECT classes"
|
||||||
|
print "if you are sure this is a feature worth the effort, "
|
||||||
|
print "report this to the authors tnagyemail-mail yahoo.fr"
|
||||||
|
|
||||||
|
# restore the original env attributes (FIXME)
|
||||||
|
objBuilder.env = objBuilderEnv
|
||||||
|
env.Moc.env = mocBuilderEnv
|
||||||
|
|
||||||
|
return (target, out_sources)
|
||||||
|
|
||||||
|
MetasourcesShared = _Metasources('SharedObject')
|
||||||
|
MetasourcesStatic = _Metasources('StaticObject')
|
||||||
|
|
||||||
|
CLVar = SCons.Util.CLVar
|
||||||
|
splitext = SCons.Util.splitext
|
||||||
|
Builder = SCons.Builder.Builder
|
||||||
|
|
||||||
|
# Detect the environment - replaces ./configure implicitely and store the options into a cache
|
||||||
|
from SCons.Options import Options
|
||||||
|
cachefile=env['CACHEDIR']+'kde.cache.py'
|
||||||
|
opts = Options(cachefile)
|
||||||
|
opts.AddOptions(
|
||||||
|
('PREFIX', 'root of the program installation'),
|
||||||
|
|
||||||
|
('QTDIR', 'root of qt directory'),
|
||||||
|
('QTLIBPATH', 'path to the qt libraries'),
|
||||||
|
('QTINCLUDEPATH', 'path to the qt includes'),
|
||||||
|
('QT_UIC', 'moc directory'),
|
||||||
|
('QT_MOC', 'moc executable command'),
|
||||||
|
('QTPLUGINS', 'uic executable command'),
|
||||||
|
('KDEDIR', 'root of kde directory'),
|
||||||
|
('KDELIBPATH', 'path to the kde libs'),
|
||||||
|
('KDEINCLUDEPATH', 'path to the kde includes'),
|
||||||
|
|
||||||
|
('KDEBIN', 'installation path of the kde binaries'),
|
||||||
|
('KDEMODULE', 'installation path of the parts and libs'),
|
||||||
|
('KDEAPPS', ''),
|
||||||
|
('KDEDATA', 'installation path of the application data'),
|
||||||
|
('KDELOCALE', ''),
|
||||||
|
('KDEDOC', 'installation path of the application documentation'),
|
||||||
|
('KDEKCFG', 'installation path of the .kcfg files'),
|
||||||
|
('KDEXDG', 'installation path of the service types'),
|
||||||
|
('KDEXDGDIR', 'installation path of the xdg service directories'),
|
||||||
|
('KDEMENU', ''),
|
||||||
|
('KDEMIME', 'installation path of to the mimetypes'),
|
||||||
|
('KDEICONS', ''),
|
||||||
|
('KDEm1', ''),
|
||||||
|
('KDEm2', ''),
|
||||||
|
('KDEm3', ''),
|
||||||
|
('KDESERV', ''),
|
||||||
|
)
|
||||||
|
opts.Update(env)
|
||||||
|
|
||||||
|
# reconfigure when things are missing
|
||||||
|
if 'configure' in env['TARGS'] or not env.has_key('QTDIR') or not env.has_key('KDEDIR'):
|
||||||
|
detect_kde(env)
|
||||||
|
|
||||||
|
# finally save the configuration to the cache file
|
||||||
|
opts.Save(cachefile, env)
|
||||||
|
|
||||||
|
## set default variables, one can override them in sconscript files
|
||||||
|
env.Append(CXXFLAGS = ['-I'+env['KDEINCLUDEPATH'], '-I'+env['QTINCLUDEPATH'] ])
|
||||||
|
env.Append(LIBPATH = [env['KDELIBPATH'], env['QTLIBPATH'] ])
|
||||||
|
|
||||||
|
env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1
|
||||||
|
|
||||||
|
env['QT_AUTOSCAN'] = 1
|
||||||
|
env['QT_DEBUG'] = 0
|
||||||
|
env['QT_UIC_HFLAGS'] = '-L $QTPLUGINS -nounload'
|
||||||
|
env['QT_UIC_CFLAGS'] = '$QT_UIC_HFLAGS -tr tr2i18n'
|
||||||
|
env['QT_LIBS'] = 'qt-mt'
|
||||||
|
env['QT_UICIMPLPREFIX'] = ''
|
||||||
|
env['QT_UICIMPLSUFFIX'] = '.cpp'
|
||||||
|
|
||||||
|
env['QT_MOCHPREFIX'] = ''
|
||||||
|
env['QT_MOCHSUFFIX'] = '.moc'
|
||||||
|
env['KDE_KCFG_IMPLPREFIX'] = ''
|
||||||
|
env['KDE_KCFG_IMPL_HSUFFIX'] = '.h'
|
||||||
|
env['KDE_KCFG_IMPL_CSUFFIX'] = '.cpp'
|
||||||
|
env['KDE_SKEL_IMPL_SUFFIX'] = '.skel'
|
||||||
|
env['MEINPROC'] = 'meinproc'
|
||||||
|
env['MSGFMT'] = 'msgfmt'
|
||||||
|
|
||||||
|
## ui file processing
|
||||||
|
def uicGenerator(target, source, env, for_signature):
|
||||||
|
act=[]
|
||||||
|
act.append('$QT_UIC $QT_UIC_HFLAGS -o '+target[0].path+' '+source[0].path)
|
||||||
|
act.append('rm -f ' +target[1].path)
|
||||||
|
act.append('echo \'#include <klocale.h>\' >> '+target[1].path)
|
||||||
|
act.append('echo \'#include <kdialog.h>\' >> '+target[1].path)
|
||||||
|
act.append('$QT_UIC $QT_UIC_CFLAGS -impl '+target[0].path+' -o '+target[1].path+'.tmp '+source[0].path)
|
||||||
|
act.append('cat '+target[1].path+'.tmp >> '+target[1].path)
|
||||||
|
act.append('rm -f '+target[1].path+'.tmp')
|
||||||
|
act.append('echo \'#include "' + target[2].name + '"\' >> '+target[1].path)
|
||||||
|
act.append('$QT_MOC -o '+target[2].path+' '+target[0].path)
|
||||||
|
return act
|
||||||
|
|
||||||
|
def uicEmitter(target, source, env):
|
||||||
|
adjustixes = SCons.Util.adjustixes
|
||||||
|
bs = SCons.Util.splitext(str(source[0].name))[0]
|
||||||
|
bs = os.path.join(str(target[0].get_dir()),bs)
|
||||||
|
# first target is automatically added by builder (.h file)
|
||||||
|
if len(target) < 2:
|
||||||
|
# second target is .cpp file
|
||||||
|
target.append(adjustixes(bs,
|
||||||
|
env.subst('$QT_UICIMPLPREFIX'),
|
||||||
|
env.subst('$QT_UICIMPLSUFFIX')))
|
||||||
|
if len(target) < 3:
|
||||||
|
# third target is .moc file
|
||||||
|
target.append(adjustixes(bs,
|
||||||
|
env.subst('$QT_MOCHPREFIX'),
|
||||||
|
env.subst('$QT_MOCHSUFFIX')))
|
||||||
|
return target, source
|
||||||
|
|
||||||
|
UIC_BUILDER = Builder(
|
||||||
|
generator = uicGenerator,
|
||||||
|
emitter = uicEmitter,
|
||||||
|
suffix = '.h',
|
||||||
|
src_suffix = '.ui')
|
||||||
|
|
||||||
|
## moc file processing
|
||||||
|
env['QT_MOCCOM'] = ('$QT_MOC -o ${TARGETS[0]} $SOURCE')
|
||||||
|
|
||||||
|
MOC_BUILDER = Builder(
|
||||||
|
action = '$QT_MOCCOM',
|
||||||
|
suffix = '.moc',
|
||||||
|
src_suffix = '.h')
|
||||||
|
|
||||||
|
MOCCPP_BUILDER = Builder(
|
||||||
|
action = '$QT_MOCCOM',
|
||||||
|
suffix = '_moc.cpp',
|
||||||
|
src_suffix = '.h')
|
||||||
|
|
||||||
|
## kcfg file processing
|
||||||
|
def kcfgGenerator(target, source, env, for_signature):
|
||||||
|
act=[]
|
||||||
|
act.append('kconfig_compiler -d'+str(source[0].get_dir())+' '+source[1].path+' '+source[0].path)
|
||||||
|
return act
|
||||||
|
|
||||||
|
def kcfgEmitter(target, source, env):
|
||||||
|
adjustixes = SCons.Util.adjustixes
|
||||||
|
bs = SCons.Util.splitext(str(source[0].name))[0]
|
||||||
|
bs = os.path.join(str(target[0].get_dir()),bs)
|
||||||
|
# .h file is automatically added
|
||||||
|
if len(target) < 2:
|
||||||
|
# add .cpp file
|
||||||
|
target.append(adjustixes(bs, env.subst('$KDE_KCFG_IMPLPREFIX'), env.subst('$KDE_KCFG_IMPL_CSUFFIX')))
|
||||||
|
|
||||||
|
if len(source) <2:
|
||||||
|
if not os.path.isfile(str(source[0])):
|
||||||
|
print RED+'kcfg file given'+str(source[0])+' does not exist !'+NORMAL
|
||||||
|
return target, source
|
||||||
|
kfcgfilename=""
|
||||||
|
kcfgFileDeclRx = re.compile("^[fF]ile\s*=\s*(.+)\s*$")
|
||||||
|
for line in file(str(source[0]), "r").readlines():
|
||||||
|
match = kcfgFileDeclRx.match(line.strip())
|
||||||
|
if match:
|
||||||
|
kcfgfilename = match.group(1)
|
||||||
|
break
|
||||||
|
source.append(str(source[0].get_dir())+'/'+kcfgfilename)
|
||||||
|
return target, source
|
||||||
|
|
||||||
|
KCFG_BUILDER = Builder(
|
||||||
|
generator = kcfgGenerator,
|
||||||
|
emitter = kcfgEmitter,
|
||||||
|
suffix = '.h',
|
||||||
|
src_suffix = '.kcfgc')
|
||||||
|
|
||||||
|
## dcop processing
|
||||||
|
def dcopGenerator(target, source, env, for_signature):
|
||||||
|
act=[]
|
||||||
|
act.append('dcopidl '+source[0].path+' > '+target[1].path+'|| ( rm -f '+target[1].path+' ; false)')
|
||||||
|
act.append('dcopidl2cpp --c++-suffix cpp --no-signals --no-stub '+target[1].path)
|
||||||
|
return act
|
||||||
|
|
||||||
|
def dcopEmitter(target, source, env):
|
||||||
|
bs = SCons.Util.splitext(str(source[0].name))[0]
|
||||||
|
bs = os.path.join(str(target[0].get_dir()),bs)
|
||||||
|
target.append(bs+'.kidl')
|
||||||
|
#target.append(bs+'_skel.cpp')
|
||||||
|
return target, source
|
||||||
|
|
||||||
|
DCOP_BUILDER = Builder(
|
||||||
|
generator = dcopGenerator,
|
||||||
|
emitter = dcopEmitter,
|
||||||
|
suffix = '_skel.cpp',
|
||||||
|
src_suffix = '.h')
|
||||||
|
|
||||||
|
## documentation processing
|
||||||
|
MEINPROC_BUILDER = Builder(
|
||||||
|
action = '$MEINPROC --check --cache $TARGET $SOURCE',
|
||||||
|
suffix = '.cache.bz2')
|
||||||
|
|
||||||
|
## translation files builder
|
||||||
|
TRANSFILES_BUILDER = Builder(
|
||||||
|
action = '$MSGFMT $SOURCE -o $TARGET',
|
||||||
|
suffix = '.gmo',
|
||||||
|
src_suffix = '.po')
|
||||||
|
|
||||||
|
## libtool file builder
|
||||||
|
def laGenerator(target, source, env, for_signature):
|
||||||
|
act=[]
|
||||||
|
act.append('echo "dlname=\''+source[0].name+'\'" > '+target[0].path)
|
||||||
|
act.append('echo "library_names=\''+source[0].name+' '+source[0].name+' '+source[0].name+'\'" >> '+target[0].path)
|
||||||
|
act.append('echo "old_library=\'\'">> '+target[0].path)
|
||||||
|
act.append('echo "dependency_libs=\'\'">> '+target[0].path)
|
||||||
|
act.append('echo "current=0">> '+target[0].path)
|
||||||
|
act.append('echo "age=0">> '+target[0].path)
|
||||||
|
act.append('echo "revision=0">> '+target[0].path)
|
||||||
|
act.append('echo "installed=yes">> '+target[0].path)
|
||||||
|
act.append('echo "shouldnotlink=no">> '+target[0].path)
|
||||||
|
act.append('echo "dlopen=\'\'">> '+target[0].path)
|
||||||
|
act.append('echo "dlpreopen=\'\'">> '+target[0].path)
|
||||||
|
act.append('echo "libdir=\''+env['KDEMODULE']+'\'" >> '+target[0].path)
|
||||||
|
env.Depends(target, source)
|
||||||
|
return act
|
||||||
|
LA_BUILDER = Builder(
|
||||||
|
generator = laGenerator,
|
||||||
|
suffix = '.la',
|
||||||
|
src_suffix = env['SHLIBSUFFIX'])
|
||||||
|
|
||||||
|
## register the builders
|
||||||
|
env['BUILDERS']['Uic'] = UIC_BUILDER
|
||||||
|
env['BUILDERS']['Moc'] = MOC_BUILDER
|
||||||
|
env['BUILDERS']['Moccpp'] = MOCCPP_BUILDER
|
||||||
|
env['BUILDERS']['Dcop'] = DCOP_BUILDER
|
||||||
|
env['BUILDERS']['Kcfg'] = KCFG_BUILDER
|
||||||
|
env['BUILDERS']['LaFile'] = LA_BUILDER
|
||||||
|
env['BUILDERS']['Meinproc'] = MEINPROC_BUILDER
|
||||||
|
env['BUILDERS']['Transfiles']= TRANSFILES_BUILDER
|
||||||
|
|
||||||
|
static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
|
||||||
|
static_obj.src_builder.append('Uic')
|
||||||
|
shared_obj.src_builder.append('Uic')
|
||||||
|
static_obj.src_builder.append('Kcfg')
|
||||||
|
shared_obj.src_builder.append('Kcfg')
|
||||||
|
static_obj.src_builder.append('LaFile')
|
||||||
|
shared_obj.src_builder.append('LaFile')
|
||||||
|
static_obj.src_builder.append('Meinproc')
|
||||||
|
shared_obj.src_builder.append('Meinproc')
|
||||||
|
static_obj.src_builder.append('Transfiles')
|
||||||
|
shared_obj.src_builder.append('Transfiles')
|
||||||
|
|
||||||
|
## Find the files to moc, dcop, and link against kde and qt
|
||||||
|
env.AppendUnique(PROGEMITTER = [MetasourcesStatic], SHLIBEMITTER=[MetasourcesShared], LIBEMITTER =[MetasourcesStatic])
|
||||||
|
|
||||||
|
## Handy helpers for building kde programs
|
||||||
|
## You should not have to modify them ..
|
||||||
|
|
||||||
|
#import SCons.Util
|
||||||
|
skel_ext = [".skel", ".SKEL"]
|
||||||
|
def KDEfiles(lenv, target, source):
|
||||||
|
""" Returns a list of files for scons (handles kde tricks like .skel)
|
||||||
|
It also makes custom checks against double includes like : ['file.ui', 'file.cpp']
|
||||||
|
(file.cpp is already included because of file.ui) """
|
||||||
|
|
||||||
|
src=[]
|
||||||
|
ui_files=[]
|
||||||
|
kcfg_files=[]
|
||||||
|
skel_files=[]
|
||||||
|
other_files=[]
|
||||||
|
|
||||||
|
# For each file, check wether it is a dcop file or not, and create the complete list of sources
|
||||||
|
for file in source:
|
||||||
|
bs = SCons.Util.splitext(file)[0]
|
||||||
|
ext = SCons.Util.splitext(file)[1]
|
||||||
|
if ext in skel_ext:
|
||||||
|
lenv.Dcop(bs+'.h')
|
||||||
|
src.append(bs+'_skel.cpp')
|
||||||
|
elif ext == ".moch":
|
||||||
|
lenv.Moccpp(bs+'.h')
|
||||||
|
src.append(bs+'_moc.cpp')
|
||||||
|
else:
|
||||||
|
src.append(file)
|
||||||
|
|
||||||
|
if ext == '.ui':
|
||||||
|
ui_files.append(bs)
|
||||||
|
elif ext == '.kcfgc':
|
||||||
|
kcfg_files.append(bs)
|
||||||
|
elif ext == '.skel':
|
||||||
|
skel_files.append(bs)
|
||||||
|
else:
|
||||||
|
other_files.append(bs)
|
||||||
|
|
||||||
|
# Now check against typical newbie errors
|
||||||
|
for file in ui_files:
|
||||||
|
for ofile in other_files:
|
||||||
|
if ofile == file:
|
||||||
|
print RED+"WARNING: You have included "+file+".ui and another file of the same prefix"+NORMAL
|
||||||
|
print "Files generated by uic (file.h, file.cpp must not be included"
|
||||||
|
for file in kcfg_files:
|
||||||
|
for ofile in other_files:
|
||||||
|
if ofile == file:
|
||||||
|
print RED+"WARNING: You have included "+file+".kcfg and another file of the same prefix"+NORMAL
|
||||||
|
print "Files generated by kconfig_compiler (settings.h, settings.cpp) must not be included"
|
||||||
|
return src
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
In the future, these functions will contain the code that will dump the
|
||||||
|
configuration for re-use from an IDE
|
||||||
|
"""
|
||||||
|
import glob
|
||||||
|
def KDEinstall(lenv, restype, subdir, files):
|
||||||
|
if not 'install' in env['TARGS']:
|
||||||
|
return
|
||||||
|
basedir=env['DESTDIR']
|
||||||
|
if len(restype)>0:
|
||||||
|
if not lenv.has_key(restype):
|
||||||
|
print RED+"unknown resource type "+restype+NORMAL
|
||||||
|
else:
|
||||||
|
basedir += lenv[restype]+'/'
|
||||||
|
#print file # <- useful to trace stuff :)
|
||||||
|
install_list = env.Install(basedir+subdir+'/', files)
|
||||||
|
env.Alias('install', install_list)
|
||||||
|
return install_list
|
||||||
|
|
||||||
|
def KDEinstallas(lenv, restype, destfile, file):
|
||||||
|
if not 'install' in env['TARGS']:
|
||||||
|
return
|
||||||
|
basedir=env['DESTDIR']
|
||||||
|
if len(restype)>0:
|
||||||
|
if not lenv.has_key(restype):
|
||||||
|
print RED+"unknown resource type "+restype+NORMAL
|
||||||
|
else:
|
||||||
|
basedir += lenv[restype]+'/'
|
||||||
|
install_list = env.InstallAs(basedir+destfile, file)
|
||||||
|
env.Alias('install', install_list)
|
||||||
|
return install_list
|
||||||
|
|
||||||
|
def KDEprogram(lenv, target, source):
|
||||||
|
""" Makes a kde program
|
||||||
|
The program is installed except if one sets env['NOAUTOINSTALL'] """
|
||||||
|
src = KDEfiles(lenv, target, source)
|
||||||
|
program_list = lenv.Program(target, src)
|
||||||
|
if not lenv.has_key('NOAUTOINSTALL'):
|
||||||
|
KDEinstall(lenv, 'KDEBIN', '', target)
|
||||||
|
return program_list
|
||||||
|
|
||||||
|
def KDEshlib(lenv, target, source, kdelib=0, libprefix='lib'):
|
||||||
|
""" Makes a shared library for kde (.la file for klibloader)
|
||||||
|
The library is installed except if one sets env['NOAUTOINSTALL'] """
|
||||||
|
src = KDEfiles(lenv, target, source)
|
||||||
|
lenv['LIBPREFIX']=libprefix
|
||||||
|
library_list = lenv.SharedLibrary(target, src)
|
||||||
|
lafile_list = lenv.LaFile(target, library_list)
|
||||||
|
if not lenv.has_key('NOAUTOINSTALL'):
|
||||||
|
install_dir = 'KDEMODULE'
|
||||||
|
if kdelib==1:
|
||||||
|
install_dir = 'KDELIBPATH'
|
||||||
|
KDEinstall(lenv, install_dir, '', library_list)
|
||||||
|
KDEinstall(lenv, install_dir, '', lafile_list)
|
||||||
|
return library_list
|
||||||
|
|
||||||
|
def KDEstaticlib(lenv, target, source):
|
||||||
|
""" Makes a static library for kde - in practice you should not use static libraries
|
||||||
|
1. they take more memory than shared ones
|
||||||
|
2. makefile.am needed it because of limitations
|
||||||
|
(cannot handle sources in separate folders - takes extra processing) """
|
||||||
|
src = KDEfiles(lenv, target, source)
|
||||||
|
return lenv.StaticLibrary(target, src)
|
||||||
|
# do not install static libraries by default
|
||||||
|
|
||||||
|
def KDEaddflags_cxx(lenv, fl):
|
||||||
|
""" Compilation flags for C++ programs """
|
||||||
|
lenv.AppendUnique(CXXFLAGS = fl)
|
||||||
|
|
||||||
|
def KDEaddflags_c(lenv, fl):
|
||||||
|
""" Compilation flags for C programs """
|
||||||
|
lenv.AppendUnique(CFLAGS = fl)
|
||||||
|
|
||||||
|
def KDEaddflags_link(lenv, fl):
|
||||||
|
""" Add link flags - Use this if KDEaddlibs below is not enough """
|
||||||
|
lenv.AppendUnique(LINKFLAGS = fl)
|
||||||
|
|
||||||
|
def KDEaddlibs(lenv, libs):
|
||||||
|
""" Helper function """
|
||||||
|
lenv.AppendUnique(LIBS = libs)
|
||||||
|
|
||||||
|
def KDEaddpaths_includes(lenv, paths):
|
||||||
|
""" Add new include paths """
|
||||||
|
lenv.AppendUnique(CPPPATH = paths)
|
||||||
|
|
||||||
|
def KDEaddpaths_libs(lenv, paths):
|
||||||
|
""" Add paths to libraries """
|
||||||
|
lenv.AppendUnique(LIBPATH = paths)
|
||||||
|
|
||||||
|
def KDElang(lenv, folder, appname):
|
||||||
|
""" Process translations (.po files) in a po/ dir """
|
||||||
|
transfiles = glob.glob(folder+'/*.po')
|
||||||
|
for lang in transfiles:
|
||||||
|
result = lenv.Transfiles(lang)
|
||||||
|
country = SCons.Util.splitext(result[0].name)[0]
|
||||||
|
KDEinstallas(lenv, 'KDELOCALE', country+'/LC_MESSAGES/'+appname+'.mo', result)
|
||||||
|
|
||||||
|
def KDEicon(lenv, icname):
|
||||||
|
""" Emulates the behaviour of Makefile.am to install icons
|
||||||
|
Contributed by: "Andrey Golovizin" <grooz@gorodok@net> """
|
||||||
|
type_dic = { 'action' : 'actions', 'app' : 'apps', 'device' :
|
||||||
|
'devices', 'filesys' : 'filesystems', 'mime' : 'mimetypes' }
|
||||||
|
dir_dic = {
|
||||||
|
'los' :'locolor/16x16',
|
||||||
|
'lom' :'locolor/32x32',
|
||||||
|
'him' :'hicolor/32x32',
|
||||||
|
'hil' :'hicolor/48x48',
|
||||||
|
'lo16' :'locolor/16x16',
|
||||||
|
'lo22' :'locolor/22x22',
|
||||||
|
'lo32' :'locolor/32x32',
|
||||||
|
'hi16' :'hicolor/16x16',
|
||||||
|
'hi22' :'hicolor/22x22',
|
||||||
|
'hi32' :'hicolor/32x32',
|
||||||
|
'hi48' :'hicolor/48x48',
|
||||||
|
'hi64' :'hicolor/64x64',
|
||||||
|
'hi128':'hicolor/128x128',
|
||||||
|
'hisc' :'hicolor/scalable',
|
||||||
|
'cr16' :'crystalsvg/16x16',
|
||||||
|
'cr22' :'crystalsvg/22x22',
|
||||||
|
'cr32' :'crystalsvg/32x32',
|
||||||
|
'cr48' :'crystalsvg/48x48',
|
||||||
|
'cr64' :'crystalsvg/64x64',
|
||||||
|
'cr128':'crystalsvg/128x128',
|
||||||
|
'crsc' :'crystalsvg/scalable'
|
||||||
|
}
|
||||||
|
|
||||||
|
iconfiles = []
|
||||||
|
for ext in ['png', 'xpm', 'mng', 'svg', 'svgz']:
|
||||||
|
files = glob.glob('*-*-%s.%s' % (icname, ext))
|
||||||
|
iconfiles += files
|
||||||
|
for iconfile in iconfiles:
|
||||||
|
tmp = iconfile.split('-')
|
||||||
|
if len(tmp)!=3:
|
||||||
|
print RED+'WARNING: icon filename has unknown format: '+iconfile+NORMAL
|
||||||
|
continue
|
||||||
|
[icon_dir, icon_type, icon_filename]=tmp
|
||||||
|
try:
|
||||||
|
destfile = '%s/%s/%s/%s' % (lenv['KDEICONS'], dir_dic[icon_dir], type_dic[icon_type], icon_filename)
|
||||||
|
except KeyError:
|
||||||
|
print RED+'WARNING: unknown icon type: '+iconfile+NORMAL
|
||||||
|
continue
|
||||||
|
## Do not use KDEinstallas here, as parsing from an ide will be necessary
|
||||||
|
if 'install' in env['TARGS']:
|
||||||
|
env.Alias('install', env.InstallAs( env['DESTDIR']+'/'+destfile, iconfile ) )
|
||||||
|
|
||||||
|
# Attach the functions to the environment so that sconscripts can use them
|
||||||
|
from SCons.Script.SConscript import SConsEnvironment
|
||||||
|
SConsEnvironment.KDEprogram = KDEprogram
|
||||||
|
SConsEnvironment.KDEshlib = KDEshlib
|
||||||
|
SConsEnvironment.KDEstaticlib = KDEstaticlib
|
||||||
|
SConsEnvironment.KDEinstall = KDEinstall
|
||||||
|
SConsEnvironment.KDEinstallas = KDEinstallas
|
||||||
|
SConsEnvironment.KDElang = KDElang
|
||||||
|
SConsEnvironment.KDEicon = KDEicon
|
||||||
|
|
||||||
|
SConsEnvironment.KDEaddflags_cxx = KDEaddflags_cxx
|
||||||
|
SConsEnvironment.KDEaddflags_c = KDEaddflags_c
|
||||||
|
SConsEnvironment.KDEaddflags_link = KDEaddflags_link
|
||||||
|
SConsEnvironment.KDEaddlibs = KDEaddlibs
|
||||||
|
SConsEnvironment.KDEaddpaths_includes = KDEaddpaths_includes
|
||||||
|
SConsEnvironment.KDEaddpaths_libs = KDEaddpaths_libs
|
||||||
|
|
@ -0,0 +1,206 @@
|
|||||||
|
<?xml version = '1.0'?>
|
||||||
|
<kdevelop>
|
||||||
|
<general>
|
||||||
|
<author>Michael Goettsche</author>
|
||||||
|
<email>mail@tuxipuxi.de</email>
|
||||||
|
<version>0.1</version>
|
||||||
|
<projectmanagement>KDevKDEAutoProject</projectmanagement>
|
||||||
|
<primarylanguage>C++</primarylanguage>
|
||||||
|
<keywords>
|
||||||
|
<keyword>C++</keyword>
|
||||||
|
<keyword>Code</keyword>
|
||||||
|
<keyword>Qt</keyword>
|
||||||
|
<keyword>KDE</keyword>
|
||||||
|
</keywords>
|
||||||
|
<projectdirectory>.</projectdirectory>
|
||||||
|
<absoluteprojectpath>false</absoluteprojectpath>
|
||||||
|
<description></description>
|
||||||
|
<ignoreparts/>
|
||||||
|
<secondaryLanguages/>
|
||||||
|
</general>
|
||||||
|
<kdevautoproject>
|
||||||
|
<general>
|
||||||
|
<activetarget>src/kstreamripper</activetarget>
|
||||||
|
<useconfiguration>default</useconfiguration>
|
||||||
|
</general>
|
||||||
|
<run>
|
||||||
|
<mainprogram>src/kstreamripper</mainprogram>
|
||||||
|
<directoryradio>executable</directoryradio>
|
||||||
|
<customdirectory>/</customdirectory>
|
||||||
|
<programargs/>
|
||||||
|
<terminal>false</terminal>
|
||||||
|
<autocompile>true</autocompile>
|
||||||
|
<envvars/>
|
||||||
|
<runarguments>
|
||||||
|
<kstreamripper></kstreamripper>
|
||||||
|
</runarguments>
|
||||||
|
</run>
|
||||||
|
<configurations>
|
||||||
|
<optimized>
|
||||||
|
<builddir>optimized</builddir>
|
||||||
|
<ccompiler>GccOptions</ccompiler>
|
||||||
|
<cxxcompiler>GppOptions</cxxcompiler>
|
||||||
|
<f77compiler>G77Options</f77compiler>
|
||||||
|
<cxxflags>-O2 -g0</cxxflags>
|
||||||
|
</optimized>
|
||||||
|
<debug>
|
||||||
|
<configargs>--enable-debug=full</configargs>
|
||||||
|
<builddir>debug</builddir>
|
||||||
|
<ccompiler>GccOptions</ccompiler>
|
||||||
|
<cxxcompiler>GppOptions</cxxcompiler>
|
||||||
|
<f77compiler>G77Options</f77compiler>
|
||||||
|
<cxxflags>-O0 -g3</cxxflags>
|
||||||
|
</debug>
|
||||||
|
<default>
|
||||||
|
<envvars/>
|
||||||
|
<configargs>--prefix=/opt/kde --enable-debug=full</configargs>
|
||||||
|
<builddir></builddir>
|
||||||
|
<topsourcedir></topsourcedir>
|
||||||
|
<cppflags></cppflags>
|
||||||
|
<ldflags></ldflags>
|
||||||
|
<ccompiler>kdevgccoptions</ccompiler>
|
||||||
|
<cxxcompiler>kdevgppoptions</cxxcompiler>
|
||||||
|
<f77compiler>kdevpgf77options</f77compiler>
|
||||||
|
<ccompilerbinary></ccompilerbinary>
|
||||||
|
<cxxcompilerbinary></cxxcompilerbinary>
|
||||||
|
<f77compilerbinary></f77compilerbinary>
|
||||||
|
<cflags></cflags>
|
||||||
|
<cxxflags></cxxflags>
|
||||||
|
<f77flags></f77flags>
|
||||||
|
</default>
|
||||||
|
</configurations>
|
||||||
|
<make>
|
||||||
|
<envvars>
|
||||||
|
<envvar value="1" name="WANT_AUTOCONF_2_5" />
|
||||||
|
<envvar value="1" name="WANT_AUTOMAKE_1_6" />
|
||||||
|
</envvars>
|
||||||
|
<abortonerror>false</abortonerror>
|
||||||
|
<numberofjobs>1</numberofjobs>
|
||||||
|
<dontact>false</dontact>
|
||||||
|
<makebin/>
|
||||||
|
</make>
|
||||||
|
</kdevautoproject>
|
||||||
|
<kdevfileview>
|
||||||
|
<groups>
|
||||||
|
<group pattern="*.cpp;*.cxx;*.h" name="Sources" />
|
||||||
|
<group pattern="*.ui" name="User Interface" />
|
||||||
|
<group pattern="*.png" name="Icons" />
|
||||||
|
<group pattern="*.po;*.ts" name="Translations" />
|
||||||
|
<group pattern="*" name="Others" />
|
||||||
|
<hidenonprojectfiles>false</hidenonprojectfiles>
|
||||||
|
<hidenonlocation>false</hidenonlocation>
|
||||||
|
</groups>
|
||||||
|
<tree>
|
||||||
|
<hidenonprojectfiles>false</hidenonprojectfiles>
|
||||||
|
<showvcsfields>false</showvcsfields>
|
||||||
|
<hidepatterns>*.o,*.lo,CVS</hidepatterns>
|
||||||
|
</tree>
|
||||||
|
</kdevfileview>
|
||||||
|
<kdevdoctreeview>
|
||||||
|
<ignoretocs>
|
||||||
|
<toc>gtk</toc>
|
||||||
|
<toc>gnustep</toc>
|
||||||
|
<toc>python</toc>
|
||||||
|
<toc>php</toc>
|
||||||
|
<toc>perl</toc>
|
||||||
|
</ignoretocs>
|
||||||
|
<projectdoc>
|
||||||
|
<userdocDir>/home/tuxipuxi/Documents/cpp/kde/kstreamripper/html/</userdocDir>
|
||||||
|
<apidocDir>/home/tuxipuxi/Documents/cpp/kde/kstreamripper/html/</apidocDir>
|
||||||
|
</projectdoc>
|
||||||
|
<ignoreqt_xml/>
|
||||||
|
<ignoredoxygen/>
|
||||||
|
<ignorekdocs/>
|
||||||
|
<ignoredevhelp/>
|
||||||
|
</kdevdoctreeview>
|
||||||
|
<kdevdebugger>
|
||||||
|
<general>
|
||||||
|
<dbgshell>libtool</dbgshell>
|
||||||
|
<programargs></programargs>
|
||||||
|
<gdbpath></gdbpath>
|
||||||
|
<configGdbScript></configGdbScript>
|
||||||
|
<runShellScript></runShellScript>
|
||||||
|
<runGdbScript></runGdbScript>
|
||||||
|
<breakonloadinglibs>true</breakonloadinglibs>
|
||||||
|
<separatetty>false</separatetty>
|
||||||
|
<floatingtoolbar>false</floatingtoolbar>
|
||||||
|
</general>
|
||||||
|
<display>
|
||||||
|
<staticmembers>false</staticmembers>
|
||||||
|
<demanglenames>true</demanglenames>
|
||||||
|
<outputradix>10</outputradix>
|
||||||
|
</display>
|
||||||
|
</kdevdebugger>
|
||||||
|
<kdevfilecreate>
|
||||||
|
<filetypes/>
|
||||||
|
<useglobaltypes>
|
||||||
|
<type ext="ui" />
|
||||||
|
<type ext="cpp" />
|
||||||
|
<type ext="h" />
|
||||||
|
</useglobaltypes>
|
||||||
|
</kdevfilecreate>
|
||||||
|
<cppsupportpart>
|
||||||
|
<filetemplates>
|
||||||
|
<interfacesuffix>.h</interfacesuffix>
|
||||||
|
<implementationsuffix>.cpp</implementationsuffix>
|
||||||
|
</filetemplates>
|
||||||
|
</cppsupportpart>
|
||||||
|
<kdevcppsupport>
|
||||||
|
<codecompletion>
|
||||||
|
<includeGlobalFunctions>true</includeGlobalFunctions>
|
||||||
|
<includeTypes>true</includeTypes>
|
||||||
|
<includeEnums>true</includeEnums>
|
||||||
|
<includeTypedefs>false</includeTypedefs>
|
||||||
|
<automaticCodeCompletion>true</automaticCodeCompletion>
|
||||||
|
<automaticArgumentsHint>true</automaticArgumentsHint>
|
||||||
|
<automaticHeaderCompletion>true</automaticHeaderCompletion>
|
||||||
|
<codeCompletionDelay>250</codeCompletionDelay>
|
||||||
|
<argumentsHintDelay>400</argumentsHintDelay>
|
||||||
|
<headerCompletionDelay>250</headerCompletionDelay>
|
||||||
|
</codecompletion>
|
||||||
|
<references/>
|
||||||
|
<creategettersetter>
|
||||||
|
<prefixGet></prefixGet>
|
||||||
|
<prefixSet>set</prefixSet>
|
||||||
|
<prefixVariable>m_,_</prefixVariable>
|
||||||
|
<parameterName>theValue</parameterName>
|
||||||
|
<inlineGet>true</inlineGet>
|
||||||
|
<inlineSet>true</inlineSet>
|
||||||
|
</creategettersetter>
|
||||||
|
</kdevcppsupport>
|
||||||
|
<dist>
|
||||||
|
<custom>false</custom>
|
||||||
|
<bzip>false</bzip>
|
||||||
|
<archname/>
|
||||||
|
<appname/>
|
||||||
|
<version>0.1</version>
|
||||||
|
<release/>
|
||||||
|
<vendor/>
|
||||||
|
<licence/>
|
||||||
|
<summary/>
|
||||||
|
<group/>
|
||||||
|
<packager/>
|
||||||
|
<description/>
|
||||||
|
<changelog/>
|
||||||
|
<devpackage>false</devpackage>
|
||||||
|
<docspackage>false</docspackage>
|
||||||
|
<appicon>false</appicon>
|
||||||
|
<arch>0</arch>
|
||||||
|
<genHTML>false</genHTML>
|
||||||
|
<useRPM>false</useRPM>
|
||||||
|
<ftpkde>false</ftpkde>
|
||||||
|
<appskde>false</appskde>
|
||||||
|
<url/>
|
||||||
|
</dist>
|
||||||
|
<kdevcvs>
|
||||||
|
<cvsoptions>-f</cvsoptions>
|
||||||
|
<commitoptions/>
|
||||||
|
<addoptions/>
|
||||||
|
<logoptions/>
|
||||||
|
<updateoptions>-dP</updateoptions>
|
||||||
|
<removeoptions>-f</removeoptions>
|
||||||
|
<revertoptions>-C -d -P</revertoptions>
|
||||||
|
<diffoptions>-u3 -p</diffoptions>
|
||||||
|
<rshoptions/>
|
||||||
|
</kdevcvs>
|
||||||
|
</kdevelop>
|
Binary file not shown.
@ -0,0 +1,38 @@
|
|||||||
|
<?xml version = '1.0' encoding = 'UTF-8'?>
|
||||||
|
<!DOCTYPE KDevPrjSession>
|
||||||
|
<KDevPrjSession>
|
||||||
|
<DocsAndViews NumberOfDocuments="6" >
|
||||||
|
<Doc0 NumberOfViews="1" URL="file:///usr/src/kstreamripper-0.3.3/src/processlistviewitem_interface.h" >
|
||||||
|
<View0 line="32" Type="Source" />
|
||||||
|
</Doc0>
|
||||||
|
<Doc1 NumberOfViews="1" URL="file:///usr/src/kstreamripper-0.3.3/src/processlistviewitem.h" >
|
||||||
|
<View0 line="30" Type="Source" />
|
||||||
|
</Doc1>
|
||||||
|
<Doc2 NumberOfViews="1" URL="file:///usr/src/kstreamripper-0.3.3/src/kstreamripper.cpp" >
|
||||||
|
<View0 line="267" Type="Source" />
|
||||||
|
</Doc2>
|
||||||
|
<Doc3 NumberOfViews="1" URL="file:///usr/src/kstreamripper-0.3.3/src/processlistviewitem.cpp" >
|
||||||
|
<View0 line="106" Type="Source" />
|
||||||
|
</Doc3>
|
||||||
|
<Doc4 NumberOfViews="1" URL="file:///usr/src/kstreamripper-0.3.3/src/kstreamripperbase.ui" >
|
||||||
|
<View0 Type="Other" />
|
||||||
|
</Doc4>
|
||||||
|
<Doc5 NumberOfViews="1" URL="file:///usr/share/qt3/doc/html/qlistview.html#selectionChanged" >
|
||||||
|
<View0 Type="Documentation" />
|
||||||
|
</Doc5>
|
||||||
|
</DocsAndViews>
|
||||||
|
<pluginList>
|
||||||
|
<kdevdebugger>
|
||||||
|
<breakpointList/>
|
||||||
|
</kdevdebugger>
|
||||||
|
<kdevbookmarks>
|
||||||
|
<bookmarks/>
|
||||||
|
</kdevbookmarks>
|
||||||
|
<kdevvalgrind>
|
||||||
|
<executable path="" params="" />
|
||||||
|
<valgrind path="" params="" />
|
||||||
|
<calltree path="" params="" />
|
||||||
|
<kcachegrind path="" />
|
||||||
|
</kdevvalgrind>
|
||||||
|
</pluginList>
|
||||||
|
</KDevPrjSession>
|
@ -0,0 +1,24 @@
|
|||||||
|
## This script demonstrates to build and install
|
||||||
|
## a simple kde program having KconfigXT settings
|
||||||
|
## with scons
|
||||||
|
##
|
||||||
|
## Thomas Nagy, 2004, 2005
|
||||||
|
|
||||||
|
## This file can be reused freely for any project (see COPYING)
|
||||||
|
|
||||||
|
|
||||||
|
## First load the environment set in the top-level SConstruct file
|
||||||
|
#Import( "env KDElang" )
|
||||||
|
Import('env')
|
||||||
|
myenv=env.Copy()
|
||||||
|
|
||||||
|
## Make translations for the program "test1" in french (requires fr.po)
|
||||||
|
myenv['APPNAME'] = "kstreamripper"
|
||||||
|
#KDElang( ['fr'], myenv )
|
||||||
|
|
||||||
|
## NOTE1 :
|
||||||
|
# KDElang( ['fr','de','nl','pl'], myenv )
|
||||||
|
|
||||||
|
## NOTE2 :
|
||||||
|
## updating the translation files must be done manually
|
||||||
|
## for the moment, using the messages.sh script
|
@ -0,0 +1,60 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Inspired by Makefile.common from coolo
|
||||||
|
# this script is used to update the .po files
|
||||||
|
|
||||||
|
# To update the translations, you will need a specific gettext
|
||||||
|
# patched for kde and a lot of patience, tenacity, luck, time ..
|
||||||
|
|
||||||
|
|
||||||
|
# I guess one should only update the .po files when all .cpp files
|
||||||
|
# are generated (after a make or scons)
|
||||||
|
|
||||||
|
# If you have a better way to do this, do not keep that info
|
||||||
|
# for yourself and help me to improve this script, thanks
|
||||||
|
# (tnagyemail-mail tat yahoo d0tt fr)
|
||||||
|
|
||||||
|
SRCDIR=../test1-kconfigxt # srcdir is the directory containing the source code
|
||||||
|
TIPSDIR=$SRCDIR # tipsdir is the directory containing the tips
|
||||||
|
|
||||||
|
KDEDIR=`kde-config --prefix`
|
||||||
|
EXTRACTRC=extractrc
|
||||||
|
KDEPOT=`kde-config --prefix`/include/kde.pot
|
||||||
|
XGETTEXT="xgettext -C -ki18n -ktr2i18n -kI18N_NOOP -ktranslate -kaliasLocale -x $KDEPOT "
|
||||||
|
|
||||||
|
## check that kde.pot is available
|
||||||
|
if ! test -e $KDEPOT; then
|
||||||
|
echo "$KDEPOT does not exist, there is something wrong with your installation!"
|
||||||
|
XGETTEXT="xgettext -C -ki18n -ktr2i18n -kI18N_NOOP -ktranslate -kaliasLocale "
|
||||||
|
fi
|
||||||
|
|
||||||
|
> rc.cpp
|
||||||
|
|
||||||
|
## extract the strings
|
||||||
|
echo "extracting the strings"
|
||||||
|
|
||||||
|
# process the .ui and .rc files
|
||||||
|
$EXTRACTRC `find $SRCDIR -iname *.rc` >> rc.cpp
|
||||||
|
$EXTRACTRC `find $SRCDIR -iname *.ui` >> rc.cpp
|
||||||
|
echo -e 'i18n("_: NAME OF TRANSLATORS\\n"\n"Your names")\ni18n("_: EMAIL OF TRANSLATORS\\n"\n"Your emails")' > $SRCDIR/_translatorinfo.cpp
|
||||||
|
|
||||||
|
# process the tips - $SRCDIR is supposed to be where the tips are living
|
||||||
|
pushd $TIPSDIR; preparetips >tips.cpp; popd
|
||||||
|
|
||||||
|
$XGETTEXT `find $SRCDIR -name "*.cpp"` -o kdissert.pot
|
||||||
|
|
||||||
|
# remove the intermediate files
|
||||||
|
rm -f $TIPSDIR/tips.cpp
|
||||||
|
rm -f rc.cpp
|
||||||
|
rm -f $SRCDIR/_translatorinfo.cpp
|
||||||
|
|
||||||
|
## now merge the .po files ..
|
||||||
|
echo "merging the .po files"
|
||||||
|
|
||||||
|
for i in `ls *.po`; do
|
||||||
|
msgmerge $i kdissert.pot -o $i || exit 1
|
||||||
|
done
|
||||||
|
|
||||||
|
## finished
|
||||||
|
echo "Done"
|
||||||
|
|
Binary file not shown.
@ -0,0 +1,69 @@
|
|||||||
|
#! /usr/bin/env python
|
||||||
|
## This script demonstrates how to build and install
|
||||||
|
## a simple kde program having KconfigXT settings
|
||||||
|
## with scons
|
||||||
|
##
|
||||||
|
## Thomas Nagy, 2004, 2005
|
||||||
|
|
||||||
|
## This file can be reused freely for any project (see COPYING)
|
||||||
|
|
||||||
|
############################
|
||||||
|
## load the config
|
||||||
|
|
||||||
|
## Use the environment and the tools set in the top-level
|
||||||
|
## SConstruct file (set with 'Export') - this is very important
|
||||||
|
|
||||||
|
Import( 'env' )
|
||||||
|
myenv=env.Copy()
|
||||||
|
|
||||||
|
#############################
|
||||||
|
## the programs to build
|
||||||
|
|
||||||
|
# The sources for our program - only .ui, .skel and .cpp are accepted
|
||||||
|
kstreamripper_sources = """
|
||||||
|
addnewstreamimpl.cpp
|
||||||
|
addnewstream.ui
|
||||||
|
kstreamripperbase.ui
|
||||||
|
kstreamripper.cpp
|
||||||
|
main.cpp
|
||||||
|
processcontroller.cpp
|
||||||
|
processlistviewitem.cpp
|
||||||
|
""".split()
|
||||||
|
|
||||||
|
# Our main program
|
||||||
|
# KDEprogram add the file to the install targets automatically,
|
||||||
|
# so you do not need to write KDEinstall('KDEBIN', '', test1, myenv)
|
||||||
|
myenv.KDEprogram( "kstreamripper", kstreamripper_sources )
|
||||||
|
|
||||||
|
############################
|
||||||
|
## Customization
|
||||||
|
|
||||||
|
## Additional include paths for compiling the source files
|
||||||
|
## Always add '../' (top-level directory) because moc makes code that needs it
|
||||||
|
myenv.KDEaddpaths_includes( ['./', '../'] )
|
||||||
|
|
||||||
|
## Necessary libraries to link against
|
||||||
|
myenv.KDEaddlibs( ['qt-mt', 'kio', 'kdeui'] )
|
||||||
|
if env['KDEm2']>3: myenv.KDEaddlibs( ['kdnssd'])
|
||||||
|
#############################
|
||||||
|
## Data to install
|
||||||
|
|
||||||
|
## The ui.rc file and the tips go into datadir/appname/
|
||||||
|
myenv.KDEinstall( 'KDEDATA', 'kstreamripper', 'kstreamripperui.rc' )
|
||||||
|
|
||||||
|
## The kcfg file is installed in a global kcfg directory
|
||||||
|
#myenv.KDEinstall( 'KDEKCFG', '', 'test1.kcfg' )
|
||||||
|
|
||||||
|
## Warning : there is a difference between the normal destop file used for the menu
|
||||||
|
## and the servicetype desktop file, so they go in different directories
|
||||||
|
## you will find more information in 'test3'
|
||||||
|
myenv.KDEinstall( 'KDEMENU', 'Utilities', 'kstreamripper.desktop')
|
||||||
|
|
||||||
|
## Use this when you need to install a mimetype file
|
||||||
|
#myenv.KDEinstall( 'KDEMIME', 'application', 'x-test1.desktop' )
|
||||||
|
|
||||||
|
## Installing icons is easy (hi-16-app-test1.png, hi-22-app-test1.png)
|
||||||
|
## do not forget that this is a python script so loops are allowed here :)
|
||||||
|
myenv.KDEicon( 'hi16-app-kstreameripper.png')
|
||||||
|
myenv.KDEicon( 'hi32-app-kstreameripper.png')
|
||||||
|
|
@ -0,0 +1,108 @@
|
|||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>AddNewStream</class>
|
||||||
|
<widget class="QDialog">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>AddNewStream</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>383</width>
|
||||||
|
<height>287</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>Add Stream....</string>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>TabFocus</enum>
|
||||||
|
</property>
|
||||||
|
<grid>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>unnamed</cstring>
|
||||||
|
</property>
|
||||||
|
<widget class="QFrame" row="0" column="0" rowspan="1" colspan="2">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>frame3</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>Raised</enum>
|
||||||
|
</property>
|
||||||
|
<grid>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>unnamed</cstring>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel" row="0" column="0">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>d_nameLabel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Name:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" row="2" column="0">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>d_descriptionLabel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Description:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" row="0" column="1">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>d_nameEdit</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" row="1" column="1">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>d_urlEdit</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" row="2" column="1">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>d_descEdit</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" row="1" column="0">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>d_urlLabel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Url of Stream:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</grid>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" row="1" column="0">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>d_okButton</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>TabFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Ok</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+O</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" row="1" column="1">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>d_cancelButton</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Cancel</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+C</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</grid>
|
||||||
|
</widget>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
</UI>
|
@ -0,0 +1,66 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2003-2005 by Michael Goettsche *
|
||||||
|
* mail@tuxipuxi.org *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include <kmessagebox.h>
|
||||||
|
|
||||||
|
#include <qpushbutton.h>
|
||||||
|
#include <qlineedit.h>
|
||||||
|
|
||||||
|
#include "addnewstreamimpl.h"
|
||||||
|
|
||||||
|
|
||||||
|
AddNewStreamImpl::AddNewStreamImpl( QWidget* parent, const char* name )
|
||||||
|
: AddNewStream( parent,name, true )
|
||||||
|
{
|
||||||
|
connect( d_okButton, SIGNAL( clicked()), this, SLOT( okButtonClicked()) );
|
||||||
|
connect( d_cancelButton, SIGNAL( clicked()), this, SLOT( cancelButtonClicked()) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AddNewStreamImpl::~AddNewStreamImpl()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//SLOTS
|
||||||
|
|
||||||
|
|
||||||
|
void AddNewStreamImpl::okButtonClicked()
|
||||||
|
{
|
||||||
|
if( d_nameEdit->text() != "" && d_urlEdit->text() != "")
|
||||||
|
{
|
||||||
|
emit finished( this );
|
||||||
|
this->close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
KMessageBox::error( this, "You forgot to fill out one or more fields, please do it now.",
|
||||||
|
"Missing Information" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void AddNewStreamImpl::cancelButtonClicked()
|
||||||
|
{
|
||||||
|
this->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,48 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2003-2005 by Michael Goettsche *
|
||||||
|
* mail@tuxipuxi.org *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef ADDNEWSTREAMIMPL_H
|
||||||
|
#define ADDNEWSTREAMIMPL_H
|
||||||
|
|
||||||
|
#include "addnewstream.h"
|
||||||
|
|
||||||
|
class AddNewStreamImpl : public AddNewStream
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
AddNewStreamImpl( QWidget* parent = 0, const char* name = 0 );
|
||||||
|
~AddNewStreamImpl();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
|
||||||
|
void okButtonClicked();
|
||||||
|
void cancelButtonClicked();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
void finished( AddNewStreamImpl* );
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 2.7 KiB |
@ -0,0 +1,309 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2003-2005 by Michael Goettsche *
|
||||||
|
* mail@tuxipuxi.org *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include <kconfig.h>
|
||||||
|
#include <kglobal.h>
|
||||||
|
#include <kled.h>
|
||||||
|
#include <kfiledialog.h>
|
||||||
|
#include <kaboutapplication.h>
|
||||||
|
|
||||||
|
#include <qpushbutton.h>
|
||||||
|
#include <qlistview.h>
|
||||||
|
#include <qlineedit.h>
|
||||||
|
#include <qdir.h>
|
||||||
|
#include <qstring.h>
|
||||||
|
#include <qstringlist.h>
|
||||||
|
#include <qbuttongroup.h>
|
||||||
|
#include <qcheckbox.h>
|
||||||
|
#include <qprocess.h>
|
||||||
|
#include <qtextedit.h>
|
||||||
|
#include <qframe.h>
|
||||||
|
#include <qtimer.h>
|
||||||
|
#include <kmessagebox.h>
|
||||||
|
#include <kstandarddirs.h>
|
||||||
|
#include <kdeversion.h>
|
||||||
|
|
||||||
|
#include "kstreamripper.h"
|
||||||
|
#include "addnewstreamimpl.h"
|
||||||
|
#include "processlistviewitem.h"
|
||||||
|
#include "processcontroller.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
KStreamRipper::KStreamRipper( QWidget* parent, const char* name )
|
||||||
|
: KStreamRipperBase( parent,name )
|
||||||
|
#if KDE_IS_VERSION(3,3,90)
|
||||||
|
, m_browser("_shoutcast._tcp",0,true)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
m_destEdit->setText( QDir::homeDirPath() );
|
||||||
|
|
||||||
|
m_streamsListView->addColumn( "Name" );
|
||||||
|
m_streamsListView->addColumn( "Status" );
|
||||||
|
m_streamsListView->addColumn( "Size" );
|
||||||
|
|
||||||
|
//app config
|
||||||
|
KConfig *appConfig = KGlobal::config();
|
||||||
|
|
||||||
|
m_destEdit->setText( appConfig->readEntry( "Destination" , "" ) );
|
||||||
|
m_timeEdit->setText( appConfig->readEntry( "Riptime", "0" ));
|
||||||
|
m_tuneInEdit->setText( appConfig->readEntry( "Command", "xmms <url>" ));
|
||||||
|
m_id3Checkbox->setChecked( appConfig->readBoolEntry( "Id3Tag", 1 ));
|
||||||
|
|
||||||
|
//listview entrys
|
||||||
|
QStringList nameList,urlList,descList;
|
||||||
|
|
||||||
|
nameList = appConfig->readListEntry( "names" );
|
||||||
|
urlList = appConfig->readListEntry( "urls" );
|
||||||
|
descList = appConfig->readListEntry( "descs" );
|
||||||
|
QStringList::iterator iter1, iter2, iter3;
|
||||||
|
iter1 = nameList.begin();
|
||||||
|
iter2 = urlList.begin();
|
||||||
|
iter3 = descList.begin();
|
||||||
|
|
||||||
|
for( ; iter1 != nameList.end() && iter2 != urlList.end() && iter3 != descList.end(); ++iter1, ++iter2, ++iter3 )
|
||||||
|
{
|
||||||
|
ProcessListViewItem * proc = new ProcessListViewItem( m_streamsListView, *iter1, "", "");
|
||||||
|
proc->setRenameEnabled(0, true);
|
||||||
|
proc->getProcessController()->setUrl( *iter2 );
|
||||||
|
proc->getProcessController()->setDescription( *iter3 );
|
||||||
|
}
|
||||||
|
|
||||||
|
//CONNECTS
|
||||||
|
|
||||||
|
//clicks
|
||||||
|
connect(m_addStreamButton, SIGNAL(clicked()), this, SLOT(addStreamButtonClicked()));
|
||||||
|
connect(m_deleteStreamButton, SIGNAL(clicked()), this, SLOT(deleteStreamButtonClicked()));
|
||||||
|
connect(m_tuneInButton, SIGNAL(clicked()), this, SLOT(tuneInButtonClicked()));
|
||||||
|
connect(m_ripButton, SIGNAL(clicked()), this, SLOT(ripButtonClicked()));
|
||||||
|
connect(m_stopRipButton, SIGNAL(clicked()), this, SLOT(stopRipButtonClicked()));
|
||||||
|
connect(m_browseButton, SIGNAL(clicked()), this, SLOT(browseButtonClicked()));
|
||||||
|
connect(m_aboutButton, SIGNAL(clicked()), this, SLOT(aboutButtonClicked()));
|
||||||
|
connect(m_quitButton, SIGNAL(clicked()), this, SLOT(quitButtonClicked()));
|
||||||
|
|
||||||
|
//other
|
||||||
|
connect( m_streamsListView, SIGNAL(selectionChanged()), this, SLOT( selectedNewListItem()) );
|
||||||
|
connect( m_DescriptionEdit, SIGNAL(textChanged(const QString&)), this, SLOT( descriptionChanged()) );
|
||||||
|
connect( m_UrlEdit, SIGNAL(textChanged(const QString&)), this, SLOT( urlChanged()) );
|
||||||
|
|
||||||
|
// zeroconf
|
||||||
|
#if KDE_IS_VERSION(3,3,90)
|
||||||
|
connect(&m_browser, SIGNAL(serviceAdded(DNSSD::RemoteService::Ptr)), this,
|
||||||
|
SLOT(serviceAdded(DNSSD::RemoteService::Ptr)));
|
||||||
|
connect(&m_browser, SIGNAL(serviceRemoved(DNSSD::RemoteService::Ptr)), this,
|
||||||
|
SLOT(serviceRemoved(DNSSD::RemoteService::Ptr)));
|
||||||
|
m_browser.startBrowse();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
KStreamRipper::~KStreamRipper()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void KStreamRipper::closeEvent( QCloseEvent *e )
|
||||||
|
{
|
||||||
|
KConfig *appConfig = KGlobal::config();
|
||||||
|
|
||||||
|
appConfig->writeEntry( "Destination", m_destEdit->text());
|
||||||
|
appConfig->writeEntry( "Riptime", m_timeEdit->text());
|
||||||
|
appConfig->writeEntry( "Command", m_tuneInEdit->text());
|
||||||
|
appConfig->writeEntry( "Id3Tag", m_id3Checkbox->isChecked());
|
||||||
|
|
||||||
|
//save the listview entrys
|
||||||
|
|
||||||
|
QStringList nameList,urlList,descList;
|
||||||
|
QListViewItemIterator iter( m_streamsListView );
|
||||||
|
|
||||||
|
while( iter.current() )
|
||||||
|
{
|
||||||
|
ProcessListViewItem * ProcItem = (ProcessListViewItem*)iter.current();
|
||||||
|
if(ProcItem->getProcessController()->getAutomatic()) continue;
|
||||||
|
|
||||||
|
nameList.append( iter.current()->text( 0 ));
|
||||||
|
urlList.append( ProcItem->getProcessController()->getUrl() );
|
||||||
|
descList.append( ProcItem->getProcessController()->getDescription() );
|
||||||
|
++iter;
|
||||||
|
}
|
||||||
|
|
||||||
|
appConfig->writeEntry( "names", nameList );
|
||||||
|
appConfig->writeEntry( "urls" , urlList );
|
||||||
|
appConfig->writeEntry( "descs", descList );
|
||||||
|
|
||||||
|
appConfig->sync();
|
||||||
|
|
||||||
|
e->accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//SLOTS
|
||||||
|
void KStreamRipper::addStreamButtonClicked()
|
||||||
|
{
|
||||||
|
AddNewStreamImpl *test = new AddNewStreamImpl( this );
|
||||||
|
connect( test, SIGNAL( finished( AddNewStreamImpl* )), this, SLOT( addStreamFinished( AddNewStreamImpl* )) );
|
||||||
|
|
||||||
|
test->show();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KStreamRipper::deleteStreamButtonClicked()
|
||||||
|
{
|
||||||
|
ProcessListViewItem * ProcItem = (ProcessListViewItem*)m_streamsListView->currentItem();
|
||||||
|
stopRipButtonClicked();
|
||||||
|
delete ProcItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KStreamRipper::tuneInButtonClicked()
|
||||||
|
{
|
||||||
|
if( m_streamsListView->currentItem() )
|
||||||
|
{
|
||||||
|
QString command = m_tuneInEdit->text().replace( "<url>", m_UrlEdit->text() );
|
||||||
|
|
||||||
|
QStringList commands = QStringList::split( " ", command );
|
||||||
|
|
||||||
|
QProcess *process = new QProcess( this );
|
||||||
|
process->setArguments( commands );
|
||||||
|
|
||||||
|
process->start();
|
||||||
|
}
|
||||||
|
else ;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if KDE_IS_VERSION(3,3,90)
|
||||||
|
void KStreamRipper::serviceAdded(DNSSD::RemoteService::Ptr srv)
|
||||||
|
{
|
||||||
|
ProcessListViewItem * proc = new ProcessListViewItem( m_streamsListView, srv->serviceName(), "", "");
|
||||||
|
proc->getProcessController()->setUrl( QString("http://%1:%2%3").arg(srv->hostName()).arg(srv->port()).arg(srv->textData()["path"]) );
|
||||||
|
proc->getProcessController()->setDescription( i18n("found by Zeroconf") );
|
||||||
|
proc->getProcessController()->setAutomatic(true);
|
||||||
|
proc->getProcessController()->setService(srv);
|
||||||
|
|
||||||
|
}
|
||||||
|
void KStreamRipper::serviceRemoved(DNSSD::RemoteService::Ptr srv)
|
||||||
|
{
|
||||||
|
QListViewItemIterator iter( m_streamsListView );
|
||||||
|
|
||||||
|
while( iter.current() ) {
|
||||||
|
ProcessListViewItem * ProcItem = (ProcessListViewItem*)iter.current();
|
||||||
|
if (ProcItem->getProcessController()->getAutomatic() &&
|
||||||
|
srv==ProcItem->getProcessController()->getService()) {
|
||||||
|
delete ProcItem;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
++iter;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void KStreamRipper::ripButtonClicked()
|
||||||
|
{
|
||||||
|
if (KStandardDirs::findExe("streamripper")) {
|
||||||
|
ProcessListViewItem * ProcItem = (ProcessListViewItem*)m_streamsListView->currentItem();
|
||||||
|
ProcItem->getProcessController()->startRip(m_destEdit->text(), m_timeEdit->text());
|
||||||
|
m_ripButton->setEnabled( false );
|
||||||
|
m_stopRipButton->setEnabled( true );
|
||||||
|
} else {
|
||||||
|
KMessageBox::error(this, "The streamripper executable wasn't found. Make sure "
|
||||||
|
"it's in your path.", "streamripper not found");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KStreamRipper::stopRipButtonClicked()
|
||||||
|
{
|
||||||
|
ProcessListViewItem * ProcItem = (ProcessListViewItem*)m_streamsListView->currentItem();
|
||||||
|
ProcItem->getProcessController()->stopRip();
|
||||||
|
m_ripButton->setEnabled( true );
|
||||||
|
m_stopRipButton->setEnabled( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
void KStreamRipper::browseButtonClicked()
|
||||||
|
{
|
||||||
|
QString openDest = KFileDialog::getExistingDirectory( QDir::homeDirPath(),
|
||||||
|
this,
|
||||||
|
"Select Destination..." );
|
||||||
|
m_destEdit->setText( openDest );
|
||||||
|
}
|
||||||
|
|
||||||
|
void KStreamRipper::aboutButtonClicked()
|
||||||
|
{
|
||||||
|
KAboutApplication *aboutApp = new KAboutApplication();
|
||||||
|
aboutApp->show();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KStreamRipper::quitButtonClicked()
|
||||||
|
{
|
||||||
|
this->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KStreamRipper::selectedNewListItem()
|
||||||
|
{
|
||||||
|
if ( !m_streamsListView->selectedItem() ) {
|
||||||
|
m_deleteStreamButton->setEnabled( false );
|
||||||
|
m_tuneInButton->setEnabled( false );
|
||||||
|
m_ripButton->setEnabled( false );
|
||||||
|
m_DescriptionEdit->setText( QString::null );
|
||||||
|
m_DescriptionEdit->setEnabled(false);
|
||||||
|
m_UrlEdit->setEnabled(false);
|
||||||
|
m_UrlEdit->setText( QString::null );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ProcessController * ProcCtl = ((ProcessListViewItem*)m_streamsListView->currentItem())->getProcessController();
|
||||||
|
|
||||||
|
// reconfigure what the user is allowed to do based on if this process is ripping
|
||||||
|
m_ripButton->setEnabled( !ProcCtl->getStatus() );
|
||||||
|
m_stopRipButton->setEnabled( ProcCtl->getStatus() );
|
||||||
|
m_tuneInButton->setEnabled( true );
|
||||||
|
m_deleteStreamButton->setEnabled( !ProcCtl->getAutomatic() );
|
||||||
|
|
||||||
|
m_DescriptionEdit->setText(ProcCtl->getDescription());
|
||||||
|
m_DescriptionEdit->setEnabled(true);
|
||||||
|
m_UrlEdit->setText(ProcCtl->getUrl());
|
||||||
|
m_UrlEdit->setEnabled( !ProcCtl->getAutomatic() );
|
||||||
|
|
||||||
|
|
||||||
|
// maybe these are more elegant than the next two functions, assuming the slots are implemented in ProcessController
|
||||||
|
//connect(m_DescriptionEdit, SIGNAL(textChanged(const QString&)), (ProcessListViewItem*)m_streamsListView->currentItem()->getProcessController(), SIGNAL(descriptionChanged(const QString&))
|
||||||
|
//connect(m_UrlEdit, SIGNAL(textChanged(const QString&)), (ProcessListViewItem*)m_streamsListView->currentItem()->getProcessController(), SIGNAL(urlChanged(const QString&))
|
||||||
|
}
|
||||||
|
|
||||||
|
void KStreamRipper::descriptionChanged()
|
||||||
|
{
|
||||||
|
// maybe this should be deleted and the communication would be through a slot
|
||||||
|
ProcessListViewItem * ProcItem = (ProcessListViewItem*)m_streamsListView->currentItem();
|
||||||
|
ProcItem->getProcessController()->setDescription(m_DescriptionEdit->text());
|
||||||
|
}
|
||||||
|
|
||||||
|
void KStreamRipper::urlChanged()
|
||||||
|
{
|
||||||
|
// maybe this should be deleted and the communication would be through a slot
|
||||||
|
ProcessListViewItem * ProcItem = (ProcessListViewItem*)m_streamsListView->currentItem();
|
||||||
|
ProcItem->getProcessController()->setUrl(m_UrlEdit->text());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void KStreamRipper::addStreamFinished( AddNewStreamImpl *e )
|
||||||
|
{
|
||||||
|
ProcessListViewItem * proc = new ProcessListViewItem( m_streamsListView, e->d_nameEdit->text(), "", "");
|
||||||
|
proc->getProcessController()->setUrl( e->d_urlEdit->text() );
|
||||||
|
proc->getProcessController()->setDescription( e->d_descEdit->text() );
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Encoding=UTF-8
|
||||||
|
Name=KStreamRipper
|
||||||
|
Name[xx]=xxKStreamRipperxx
|
||||||
|
Exec=kstreamripper
|
||||||
|
Icon=kstreamripper
|
||||||
|
Type=Application
|
||||||
|
Comment=A simple KDE Application
|
||||||
|
Comment[da]=Et simpelt KDE program
|
||||||
|
Comment[es]=Una aplicación de KDE sencilla
|
||||||
|
Comment[hu]=Egyszerű KDE-alkalmazás
|
||||||
|
Comment[pt]=Uma aplicação KDE simples
|
||||||
|
Comment[pt_BR]=Um simples Aplicativo do KDE
|
||||||
|
Comment[sl]=Preprost program za KDE
|
||||||
|
Comment[sv]=Ett enkelt KDE-program
|
||||||
|
Comment[xx]=xxA simple KDE Applicationxx
|
@ -0,0 +1,79 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2003-2005 by Michael Goettsche *
|
||||||
|
* mail@tuxipuxi.org *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef KSTREAMRIPPER_H
|
||||||
|
#define KSTREAMRIPPER_H
|
||||||
|
|
||||||
|
#include <kdeversion.h>
|
||||||
|
#include "kstreamripperbase.h"
|
||||||
|
#if KDE_IS_VERSION(3,3,90)
|
||||||
|
#include <dnssd/servicebrowser.h>
|
||||||
|
#include <dnssd/remoteservice.h>
|
||||||
|
#else
|
||||||
|
// damned moc will create slots regardless of #if macro
|
||||||
|
// this is hack to avoid undefined type
|
||||||
|
namespace DNSSD { namespace RemoteService { typedef int Ptr; } }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
class AddNewStreamImpl;
|
||||||
|
class QString;
|
||||||
|
|
||||||
|
class KStreamRipper : public KStreamRipperBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
KStreamRipper( QWidget* parent = 0, const char* name = 0 );
|
||||||
|
~KStreamRipper();
|
||||||
|
|
||||||
|
virtual void closeEvent( QCloseEvent* );
|
||||||
|
#if KDE_IS_VERSION(3,3,90)
|
||||||
|
DNSSD::ServiceBrowser m_browser;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
|
||||||
|
void addStreamButtonClicked();
|
||||||
|
void deleteStreamButtonClicked();
|
||||||
|
void tuneInButtonClicked();
|
||||||
|
void ripButtonClicked();
|
||||||
|
void stopRipButtonClicked();
|
||||||
|
void browseButtonClicked();
|
||||||
|
void aboutButtonClicked();
|
||||||
|
void quitButtonClicked();
|
||||||
|
|
||||||
|
void selectedNewListItem();
|
||||||
|
void descriptionChanged();
|
||||||
|
void urlChanged();
|
||||||
|
|
||||||
|
void addStreamFinished( AddNewStreamImpl* );
|
||||||
|
#if KDE_IS_VERSION(3,3,90)
|
||||||
|
void serviceAdded(DNSSD::RemoteService::Ptr srv);
|
||||||
|
void serviceRemoved(DNSSD::RemoteService::Ptr srv);
|
||||||
|
#else
|
||||||
|
void serviceAdded(DNSSD::RemoteService::Ptr) {};
|
||||||
|
void serviceRemoved(DNSSD::RemoteService::Ptr) {};
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,16 @@
|
|||||||
|
Begin3
|
||||||
|
Title: KStreamRipper -- Some description
|
||||||
|
Version: 0.1
|
||||||
|
Entered-date:
|
||||||
|
Description:
|
||||||
|
Keywords: KDE Qt
|
||||||
|
Author: Michael Goettsche <mail@tuxipuxi.de>
|
||||||
|
Maintained-by: Michael Goettsche <mail@tuxipuxi.de>
|
||||||
|
Home-page:
|
||||||
|
Alternate-site:
|
||||||
|
Primary-site: ftp://ftp.kde.org/pub/kde/unstable/apps/utils
|
||||||
|
xxxxxx kstreamripper-0.1.tar.gz
|
||||||
|
xxx kstreamripper-0.1.lsm
|
||||||
|
Platform: Linux. Needs KDE
|
||||||
|
Copying-policy: GPL
|
||||||
|
End
|
@ -0,0 +1,337 @@
|
|||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>KStreamRipperBase</class>
|
||||||
|
<widget class="QWidget">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>KStreamRipperBase</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>749</width>
|
||||||
|
<height>782</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>KStreamRipper V. 0.3.4</string>
|
||||||
|
</property>
|
||||||
|
<grid>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>unnamed</cstring>
|
||||||
|
</property>
|
||||||
|
<spacer row="5" column="0" rowspan="1" colspan="2">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>spacer1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>Expanding</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint">
|
||||||
|
<size>
|
||||||
|
<width>31</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
<widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_favoriteLabel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Your Radio Streams:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLayoutWidget" row="6" column="1">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>layout10</cstring>
|
||||||
|
</property>
|
||||||
|
<hbox>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>unnamed</cstring>
|
||||||
|
</property>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_aboutButton</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>About</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_quitButton</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Quit</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</hbox>
|
||||||
|
</widget>
|
||||||
|
<spacer row="6" column="0">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>spacer5</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>Expanding</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint">
|
||||||
|
<size>
|
||||||
|
<width>421</width>
|
||||||
|
<height>21</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
<widget class="QButtonGroup" row="3" column="0" rowspan="1" colspan="2">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_streamsGroup</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Stream Options</string>
|
||||||
|
</property>
|
||||||
|
<grid>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>unnamed</cstring>
|
||||||
|
</property>
|
||||||
|
<widget class="QPushButton" row="0" column="0">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_addStreamButton</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Add Stream</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+A</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" row="0" column="1">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_deleteStreamButton</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Delete Stream</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+D</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" row="0" column="4">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_stopRipButton</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Stop Rip</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+S</string>
|
||||||
|
</property>
|
||||||
|
<property name="on">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" row="0" column="2">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_tuneInButton</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Tune in</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+T</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" row="0" column="3">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_ripButton</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Rip Stream</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+R</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</grid>
|
||||||
|
</widget>
|
||||||
|
<widget class="QListView" row="1" column="0" rowspan="1" colspan="2">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_streamsListView</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="allColumnsShowFocus">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="resizeMode">
|
||||||
|
<enum>AllColumns</enum>
|
||||||
|
</property>
|
||||||
|
<property name="defaultRenameAction">
|
||||||
|
<enum>Reject</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QGroupBox" row="4" column="0" rowspan="1" colspan="2">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_settingsGroup</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="mouseTracking">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Settings</string>
|
||||||
|
</property>
|
||||||
|
<grid>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>unnamed</cstring>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel" row="0" column="0">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_pathLabel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Destination:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" row="1" column="0">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_timeToRip</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Time to Rip:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" row="0" column="3">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_id3Label</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Add ID3 Tag:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox" row="0" column="4">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_id3Checkbox</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" row="2" column="0">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_tuneInLabel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Tune in Command:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" row="1" column="2">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_secondsLabel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>seconds</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" row="0" column="2">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_browseButton</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>....</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" row="2" column="1">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_tuneInEdit</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>xmms <url></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" row="1" column="1">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_timeEdit</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>0</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" row="0" column="1">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_destEdit</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Choose a directory</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</grid>
|
||||||
|
</widget>
|
||||||
|
<widget class="QGroupBox" row="2" column="0" rowspan="1" colspan="2">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_Details</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Details</string>
|
||||||
|
</property>
|
||||||
|
<grid>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>unnamed</cstring>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel" row="0" column="0">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_StreamDesc</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Description:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" row="1" column="0" rowspan="2" colspan="2">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_StreamURL</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>URL:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" row="2" column="1">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_UrlEdit</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" row="0" column="1">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>m_DescriptionEdit</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</grid>
|
||||||
|
</widget>
|
||||||
|
</grid>
|
||||||
|
</widget>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
</UI>
|
@ -0,0 +1,8 @@
|
|||||||
|
<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
|
||||||
|
<kpartgui name="kstreamripper" version="1">
|
||||||
|
<MenuBar>
|
||||||
|
<Menu name="custom"><text>C&ustom</text>
|
||||||
|
<Action name="custom_action" />
|
||||||
|
</Menu>
|
||||||
|
</MenuBar>
|
||||||
|
</kpartgui>
|
@ -0,0 +1,66 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2003-2005 by Michael Goettsche *
|
||||||
|
* mail@tuxipuxi.org *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include <kapplication.h>
|
||||||
|
#include <kaboutdata.h>
|
||||||
|
#include <kcmdlineargs.h>
|
||||||
|
|
||||||
|
#include "kstreamripper.h"
|
||||||
|
|
||||||
|
|
||||||
|
int main( int argc, char *argv[] )
|
||||||
|
{
|
||||||
|
KAboutData aboutApp( "KStreamRipper", I18N_NOOP( "KStreamRipper" ), "0.3.4",
|
||||||
|
"KStreamRipper is a Frontend to Streamripper. Visit Homepage for more Info.",
|
||||||
|
KAboutData::License_GPL, "(C) 2003-2005 Michael Goettsche", 0,
|
||||||
|
"http://kstreamripper.tuxipuxi.org", "mail@tuxipuxi.org" );
|
||||||
|
|
||||||
|
aboutApp.addAuthor( "Michael Goettsche", "Maintainer, Initial version", "mail@tuxipuxi.org" );
|
||||||
|
aboutApp.addAuthor( "William Entriken", "Concurrent Ripping, Major UI improvements", "william.entriken@villanova.edu" );
|
||||||
|
aboutApp.addCredit( "Kevin Krammer", "Assistance");
|
||||||
|
aboutApp.addCredit( "Jakub Stachowski", "bksys migration, crash fix" );
|
||||||
|
KCmdLineArgs::init( argc, argv, &aboutApp );
|
||||||
|
|
||||||
|
KApplication app;
|
||||||
|
|
||||||
|
KStreamRipper *mainWidget = new KStreamRipper();
|
||||||
|
|
||||||
|
app.setMainWidget( mainWidget );
|
||||||
|
mainWidget->show();
|
||||||
|
|
||||||
|
mainWidget->resize( 700, 600 );
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,148 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Will Entriken *
|
||||||
|
* william.entriken@villanova.edu *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "processcontroller.h"
|
||||||
|
#include "processlistviewitem.h"
|
||||||
|
|
||||||
|
ProcessController::ProcessController(ProcessListViewItem * parent)
|
||||||
|
: QObject((QObject *)parent), myParent(parent), myStatus(false), myAutomatic(false), myProcess(new QProcess(this))
|
||||||
|
{
|
||||||
|
connect (myProcess, SIGNAL( readyReadStdout() ), (ProcessController *) this, SLOT( readStdout()) );
|
||||||
|
// connect (myProcess, SIGNAL( destroyed() ), myProcess, SLOT( kill()) );
|
||||||
|
// this should work, according to http://doc.trolltech.com/3.2/qobject.html#~QObject but it doesn't
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessController::~ProcessController()
|
||||||
|
{
|
||||||
|
myProcess->kill();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProcessController::readStdout()
|
||||||
|
{
|
||||||
|
QString tempOutput = myProcess->readStdout();
|
||||||
|
|
||||||
|
if( tempOutput.contains( "ripping..." ))
|
||||||
|
{
|
||||||
|
QString songname = tempOutput.mid( tempOutput.find( "]" )+1, tempOutput.findRev( "[" ) - tempOutput.find( "]" ) - 1);
|
||||||
|
myParent->setText( 1, songname.stripWhiteSpace() );
|
||||||
|
|
||||||
|
QString bytesR = tempOutput.mid( tempOutput.findRev( "[" )+1, tempOutput.findRev( "]" ) - tempOutput.findRev( "[" ) - 1);
|
||||||
|
myParent->setText( 2, bytesR.stripWhiteSpace() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( tempOutput.contains( "Connecting..." ))
|
||||||
|
{
|
||||||
|
myParent->setText( 1, "Connecting..." );
|
||||||
|
myParent->setText( 2, "" );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( tempOutput.contains( "buffering" ))
|
||||||
|
{
|
||||||
|
myParent->setText( 1, "Buffering..." );
|
||||||
|
myParent->setText( 2, "" );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( tempOutput.contains( "Time to stop is here" ))
|
||||||
|
{
|
||||||
|
myParent->setText( 1, "Complete" );
|
||||||
|
myParent->setText( 2, "" );
|
||||||
|
//QTimer::singleShot( 1500, myParent, SLOT( setEmptyText(3) ));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ProcessController::startRip(QString destination, QString time)
|
||||||
|
{
|
||||||
|
myStatus = true;
|
||||||
|
myParent->setText( 1, "Ripping" );
|
||||||
|
|
||||||
|
myProcess->clearArguments();
|
||||||
|
myProcess->addArgument( "streamripper" );
|
||||||
|
myProcess->addArgument( myUrl );
|
||||||
|
myProcess->addArgument( "-d " );
|
||||||
|
myProcess->addArgument( destination );
|
||||||
|
if( time.toInt() )
|
||||||
|
{
|
||||||
|
myProcess->addArgument( "-l " );
|
||||||
|
myProcess->addArgument( time );
|
||||||
|
}
|
||||||
|
|
||||||
|
myProcess->setCommunication( QProcess::Stdout | QProcess::Stderr | QProcess::DupStderr );
|
||||||
|
myProcess->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ProcessController::stopRip()
|
||||||
|
{
|
||||||
|
myStatus = false;
|
||||||
|
myParent->setText( 1, "" );
|
||||||
|
myParent->setText( 2, "" );
|
||||||
|
|
||||||
|
myProcess->tryTerminate();
|
||||||
|
QTimer::singleShot( 2000, myProcess, SLOT( kill() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool ProcessController::getStatus()
|
||||||
|
{
|
||||||
|
return myStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString ProcessController::getUrl()
|
||||||
|
{
|
||||||
|
return myUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProcessController::setAutomatic(bool a)
|
||||||
|
{
|
||||||
|
myAutomatic = a;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ProcessController::getAutomatic()
|
||||||
|
{
|
||||||
|
return myAutomatic;
|
||||||
|
}
|
||||||
|
#if KDE_IS_VERSION(3,3,90)
|
||||||
|
void ProcessController::setService(DNSSD::RemoteService::Ptr service)
|
||||||
|
{
|
||||||
|
myService = service;
|
||||||
|
}
|
||||||
|
|
||||||
|
DNSSD::RemoteService::Ptr ProcessController::getService()
|
||||||
|
{
|
||||||
|
return myService;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
QString ProcessController::getDescription()
|
||||||
|
{
|
||||||
|
return myDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProcessController::setUrl(QString Url)
|
||||||
|
{
|
||||||
|
myUrl = Url;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProcessController::setDescription(QString Description)
|
||||||
|
{
|
||||||
|
myDescription = Description;
|
||||||
|
}
|
@ -0,0 +1,71 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Will Entriken *
|
||||||
|
* william.entriken@villanova.edu *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef PROCESSCONTROLLER_H
|
||||||
|
#define PROCESSCONTROLLER_H
|
||||||
|
|
||||||
|
#include <qprocess.h>
|
||||||
|
#include <qstring.h>
|
||||||
|
#include <qtimer.h>
|
||||||
|
#include <qobject.h>
|
||||||
|
#include <kdeversion.h>
|
||||||
|
#if KDE_IS_VERSION(3,3,90)
|
||||||
|
#include <dnssd/remoteservice.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class ProcessListViewItem;
|
||||||
|
|
||||||
|
class ProcessController : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
ProcessController(ProcessListViewItem * parent);
|
||||||
|
~ProcessController();
|
||||||
|
|
||||||
|
bool getStatus();
|
||||||
|
bool getAutomatic();
|
||||||
|
void setAutomatic(bool a);
|
||||||
|
#if KDE_IS_VERSION(3,3,90)
|
||||||
|
DNSSD::RemoteService::Ptr getService();
|
||||||
|
void setService(DNSSD::RemoteService::Ptr service);
|
||||||
|
#endif
|
||||||
|
void setUrl(QString Url);
|
||||||
|
void setDescription(QString Description);
|
||||||
|
QString getUrl();
|
||||||
|
QString getDescription();
|
||||||
|
void startRip(QString destination, QString time);
|
||||||
|
void stopRip();
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
void readStdout();
|
||||||
|
|
||||||
|
private:
|
||||||
|
ProcessListViewItem * myParent;
|
||||||
|
bool myStatus;
|
||||||
|
bool myAutomatic;
|
||||||
|
#if KDE_IS_VERSION(3,3,90)
|
||||||
|
DNSSD::RemoteService::Ptr myService;
|
||||||
|
#endif
|
||||||
|
QProcess * myProcess;
|
||||||
|
QString myUrl;
|
||||||
|
QString myDescription;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,108 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Will Entriken *
|
||||||
|
* william.entriken@villanova.edu *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "processlistviewitem.h"
|
||||||
|
|
||||||
|
#include "processlistviewitem.h"
|
||||||
|
#include "processcontroller.h"
|
||||||
|
|
||||||
|
ProcessListViewItem::ProcessListViewItem( QListView * parent )
|
||||||
|
: QListViewItem(parent), myProcessController(new ProcessController(this))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessListViewItem::ProcessListViewItem( QListViewItem * parent )
|
||||||
|
: QListViewItem(parent), myProcessController(new ProcessController(this))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessListViewItem::ProcessListViewItem( QListView * parent, QListViewItem * after )
|
||||||
|
: QListViewItem(parent, after), myProcessController(new ProcessController(this))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessListViewItem::ProcessListViewItem( QListViewItem * parent, QListViewItem * after )
|
||||||
|
: QListViewItem(parent, after), myProcessController(new ProcessController(this))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessListViewItem::ProcessListViewItem( QListView * parent,
|
||||||
|
QString label1,
|
||||||
|
QString label2,
|
||||||
|
QString label3,
|
||||||
|
QString label4,
|
||||||
|
QString label5,
|
||||||
|
QString label6,
|
||||||
|
QString label7,
|
||||||
|
QString label8 )
|
||||||
|
: QListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8), myProcessController(new ProcessController(this))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessListViewItem::ProcessListViewItem( QListViewItem * parent,
|
||||||
|
QString label1,
|
||||||
|
QString label2,
|
||||||
|
QString label3,
|
||||||
|
QString label4,
|
||||||
|
QString label5,
|
||||||
|
QString label6,
|
||||||
|
QString label7,
|
||||||
|
QString label8 )
|
||||||
|
: QListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8), myProcessController(new ProcessController(this))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessListViewItem::ProcessListViewItem( QListView * parent, QListViewItem * after,
|
||||||
|
QString label1,
|
||||||
|
QString label2,
|
||||||
|
QString label3,
|
||||||
|
QString label4,
|
||||||
|
QString label5,
|
||||||
|
QString label6,
|
||||||
|
QString label7,
|
||||||
|
QString label8 )
|
||||||
|
: QListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8),
|
||||||
|
myProcessController(new ProcessController(this))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessListViewItem::ProcessListViewItem( QListViewItem * parent, QListViewItem * after,
|
||||||
|
QString label1,
|
||||||
|
QString label2,
|
||||||
|
QString label3,
|
||||||
|
QString label4,
|
||||||
|
QString label5,
|
||||||
|
QString label6,
|
||||||
|
QString label7,
|
||||||
|
QString label8 )
|
||||||
|
: QListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8),
|
||||||
|
myProcessController(new ProcessController(this))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessListViewItem::~ProcessListViewItem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessController * ProcessListViewItem::getProcessController()
|
||||||
|
{
|
||||||
|
return myProcessController;
|
||||||
|
}
|
@ -0,0 +1,71 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Will Entriken *
|
||||||
|
* william.entriken@villanova.edu *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef PROCESSLISTVIEWITEM_H
|
||||||
|
#define PROCESSLISTVIEWITEM_H
|
||||||
|
|
||||||
|
#include <qlistview.h>
|
||||||
|
#include <qstring.h>
|
||||||
|
#include <qobject.h>
|
||||||
|
|
||||||
|
class ProcessController;
|
||||||
|
|
||||||
|
class ProcessListViewItem : public QObject, public QListViewItem
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
|
||||||
|
ProcessListViewItem( QListView * parent );
|
||||||
|
ProcessListViewItem( QListViewItem * parent );
|
||||||
|
ProcessListViewItem( QListView * parent, QListViewItem * after );
|
||||||
|
ProcessListViewItem( QListViewItem * parent, QListViewItem * after );
|
||||||
|
|
||||||
|
ProcessListViewItem( QListView * parent,
|
||||||
|
QString, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null );
|
||||||
|
ProcessListViewItem( QListViewItem * parent,
|
||||||
|
QString, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null );
|
||||||
|
|
||||||
|
ProcessListViewItem( QListView * parent, QListViewItem * after,
|
||||||
|
QString, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null );
|
||||||
|
ProcessListViewItem( QListViewItem * parent, QListViewItem * after,
|
||||||
|
QString, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null );
|
||||||
|
|
||||||
|
~ProcessListViewItem();
|
||||||
|
|
||||||
|
ProcessController * getProcessController();
|
||||||
|
|
||||||
|
private:
|
||||||
|
ProcessController * myProcessController;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,38 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Will Entriken *
|
||||||
|
* william.entriken@villanova.edu *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __PROCESSLISTVIEWITEM_INTERFACE_H
|
||||||
|
#define __PROCESSLISTVIEWITEM_INTERFACE_H
|
||||||
|
|
||||||
|
class ProcessListViewItemInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ProcessListViewItemInterface() {}
|
||||||
|
virtual ~ProcessListViewItemInterface() {}
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
ProcessListViewItemInterface( const ProcessListViewItemInterface& source );
|
||||||
|
void operator = ( const ProcessListViewItemInterface& source );
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __PROCESSLISTVIEWITEM_INTERFACE_H
|
@ -0,0 +1,19 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2003 by Michael Goettsche *
|
||||||
|
* mail@tuxipuxi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
@ -0,0 +1,19 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2003 by Michael Goettsche *
|
||||||
|
* mail@tuxipuxi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
@ -0,0 +1,61 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
BOLD="\033[1m"
|
||||||
|
RED="\033[91m"
|
||||||
|
GREEN="\033[92m"
|
||||||
|
YELLOW="\033[93m"
|
||||||
|
CYAN="\033[96m"
|
||||||
|
NORMAL="\033[0m"
|
||||||
|
|
||||||
|
#bunzip2 scons-mini.tar.bz2
|
||||||
|
#tar xvf scons-mini.tar
|
||||||
|
|
||||||
|
# if kde is there a recent tar should be too
|
||||||
|
tar xjvf scons-mini.tar.bz2
|
||||||
|
|
||||||
|
cat > Makefile << EOF
|
||||||
|
## Makefile automatically generated by unpack_local_scons.sh
|
||||||
|
|
||||||
|
### To use scons when installed globally use
|
||||||
|
#SCONS=scons
|
||||||
|
### To run the local version instead, define
|
||||||
|
SCONS=./scons
|
||||||
|
|
||||||
|
# scons : compile
|
||||||
|
# scons -c : clean
|
||||||
|
# scons install : install
|
||||||
|
# scons -c install : uninstall and clean
|
||||||
|
|
||||||
|
# default target : use scons to build the programs
|
||||||
|
all:
|
||||||
|
\$(SCONS) -Q
|
||||||
|
|
||||||
|
### There are several possibilities to help debugging :
|
||||||
|
# scons --debug=explain, scons --debug=tree ..
|
||||||
|
#
|
||||||
|
### To optimize the runtime, use
|
||||||
|
# scons --max-drift=1 --implicit-deps-unchanged
|
||||||
|
debug:
|
||||||
|
\$(SCONS) -Q --debug=tree
|
||||||
|
|
||||||
|
clean:
|
||||||
|
\$(SCONS) -c
|
||||||
|
|
||||||
|
install:
|
||||||
|
\$(SCONS) install
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
\$(SCONS) -c install
|
||||||
|
|
||||||
|
## this target creates a tarball of the project
|
||||||
|
dist:
|
||||||
|
\$(SCONS) dist
|
||||||
|
EOF
|
||||||
|
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e $GREEN"A minimum scons distribution has been unpacked right here"
|
||||||
|
echo -e $GREEN"you can now run : "$NORMAL
|
||||||
|
echo -e $BOLD"./scons"$NORMAL
|
||||||
|
echo -e $BOLD"./scons install$NORMAL (as root probably)"
|
||||||
|
|
Loading…
Reference in new issue