From 0b2288da16894d45e95caf5c0f1f5cba3f17c2dd Mon Sep 17 00:00:00 2001 From: gregory guy Date: Sat, 13 Jun 2020 16:55:00 +0200 Subject: [PATCH] Conversion to the cmake building system. Signed-off-by: gregory guy --- CMakeLists.txt | 79 +++ ConfigureChecks.cmake | 49 ++ src/FAQ => FAQ | 0 INSTALL | 29 + PKGBUILD | 17 - README | 48 +- SConstruct | 168 ----- src/TODO => TODO | 0 config.h.cmake | 12 + configure | 87 --- doc/CMakeLists.txt | 1 + doc/en/CMakeLists.txt | 1 + doc/en/index.docbook | 437 ++++++++++++ doc/en/main.png | Bin 0 -> 12016 bytes doc/man/CMakeLists.txt | 5 + doc/man/codeine.1 | 94 +++ misc/CMakeLists.txt | 31 + po/messages.sh | 60 -- scons/codeine.py | 101 --- scons/generic.py | 95 --- scons/kde.py | 771 ---------------------- scons/scons-mini.tar.bz2 | Bin 58214 -> 0 bytes src/CMakeLists.txt | 2 + src/SConscript | 21 - src/app/CMakeLists.txt | 54 ++ src/app/SConscript | 59 -- src/app/actions.cpp | 6 +- src/app/adjustSizeButton.cpp | 10 +- src/app/adjustSizeButton.h | 2 +- src/app/analyzer.cpp | 12 +- src/app/analyzer.h | 6 +- src/app/captureFrame.cpp | 18 +- src/app/{config.h => codeineConfig.h} | 0 src/app/fullScreenAction.cpp | 2 +- src/app/insertAspectRatioMenuItems.cpp | 2 +- src/app/main.cpp | 6 +- src/app/mainWindow.cpp | 25 +- src/app/mainWindow.h | 2 +- src/app/playDialog.cpp | 14 +- src/app/playDialog.h | 2 +- src/app/playlistFile.cpp | 10 +- src/app/slider.cpp | 14 +- src/app/slider.h | 2 +- src/app/stateChange.cpp | 14 +- src/app/theStream.cpp | 2 +- src/app/theStream.h | 6 +- src/app/videoSettings.cpp | 8 +- src/app/videoSettings.h | 2 +- src/app/videoWindow.cpp | 8 +- src/app/volumeAction.cpp | 14 +- src/app/xineConfig.cpp | 20 +- src/app/xineConfig.h | 2 +- src/app/xineEngine.cpp | 15 +- src/app/xineEngine.h | 6 +- src/debug.h | 4 +- src/mxcl.library.cpp | 2 +- src/mxcl.library.h | 2 +- src/part/CMakeLists.txt | 36 + src/part/SConscript | 12 - src/part/part.cpp | 8 +- src/part/toolbar.cpp | 6 +- src/part/videoWindow.cpp | 8 +- src/part/videoWindow.h | 4 +- src/part/xineEngine.cpp | 12 +- translations/CMakeLists.txt | 1 + translations/messages/CMakeLists.txt | 14 + {po => translations/messages}/codeine.pot | 0 67 files changed, 992 insertions(+), 1568 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 ConfigureChecks.cmake rename src/FAQ => FAQ (100%) create mode 100644 INSTALL delete mode 100644 PKGBUILD delete mode 100644 SConstruct rename src/TODO => TODO (100%) create mode 100644 config.h.cmake delete mode 100755 configure create mode 100644 doc/CMakeLists.txt create mode 100644 doc/en/CMakeLists.txt create mode 100644 doc/en/index.docbook create mode 100644 doc/en/main.png create mode 100644 doc/man/CMakeLists.txt create mode 100644 doc/man/codeine.1 create mode 100644 misc/CMakeLists.txt delete mode 100755 po/messages.sh delete mode 100644 scons/codeine.py delete mode 100644 scons/generic.py delete mode 100644 scons/kde.py delete mode 100644 scons/scons-mini.tar.bz2 create mode 100644 src/CMakeLists.txt delete mode 100644 src/SConscript create mode 100644 src/app/CMakeLists.txt delete mode 100644 src/app/SConscript rename src/app/{config.h => codeineConfig.h} (100%) create mode 100644 src/part/CMakeLists.txt delete mode 100644 src/part/SConscript create mode 100644 translations/CMakeLists.txt create mode 100644 translations/messages/CMakeLists.txt rename {po => translations/messages}/codeine.pot (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..4ddfb4f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,79 @@ +############################################ +# # +# Improvements and feedbacks are welcome # +# # +# This file is released under GPL >= 3 # +# # +############################################ + + +cmake_minimum_required( VERSION 2.8 ) + + +#### general package setup + +project( codeine ) +set( VERSION R14.1.0 ) + + +#### include essential cmake modules + +include( FindPkgConfig ) +include( CheckFunctionExists ) +include( CheckSymbolExists ) +include( CheckIncludeFile ) +include( CheckLibraryExists ) +include( CheckCSourceCompiles ) +include( CheckCXXSourceCompiles ) + + +#### include our cmake modules + +set( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules" ) +include( TDEMacros ) + + +##### setup install paths + +include( TDESetupPaths ) +tde_setup_paths( ) + + +##### optional stuff + +option( WITH_ALL_OPTIONS "Enable all optional support" OFF ) +option( WITH_GCC_VISIBILITY "Enable fvisibility and fvisibility-inlines-hidden" ${WITH_ALL_OPTIONS} ) + + +##### user requested modules + +option( BUILD_ALL "Build all" ON ) +option( BUILD_DOC "Build documentation" ${BUILD_ALL} ) +option( BUILD_TRANSLATIONS "Build translations" ${BUILD_ALL} ) + + +##### configure checks + +include( ConfigureChecks.cmake ) + + +###### global compiler settings + +add_definitions( -DHAVE_CONFIG_H -UTQT_NO_ASCII_CAST ) + +set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TQT_CXX_FLAGS}" ) +set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined" ) +set( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-undefined" ) + + +##### directories + +add_subdirectory( src ) +add_subdirectory( misc ) +tde_conditional_add_subdirectory( BUILD_DOC doc ) +tde_conditional_add_subdirectory( BUILD_TRANSLATIONS translations ) + + +##### write configure files + +configure_file( config.h.cmake config.h @ONLY ) diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake new file mode 100644 index 0000000..3a6fd3e --- /dev/null +++ b/ConfigureChecks.cmake @@ -0,0 +1,49 @@ +########################################### +# # +# Improvements and feedback are welcome # +# # +# This file is released under GPL >= 3 # +# # +########################################### + +# required stuff +find_package( TQt ) +find_package( TDE ) + +tde_setup_architecture_flags( ) + +include(TestBigEndian) +test_big_endian(WORDS_BIGENDIAN) + +tde_setup_largefiles( ) + + +##### check for gcc visibility support + +if( WITH_GCC_VISIBILITY ) + tde_setup_gcc_visibility( ) +endif( WITH_GCC_VISIBILITY ) + + +##### look for X11 + +find_package( X11 ) + + +##### look for XTest and xcb-util-keysyms + +pkg_search_module( X11_XTEST xtst ) +pkg_search_module( X11_KEYSIM xcb-keysyms ) + +if( (NOT X11_XTest_FOUND) OR (NOT X11_KEYSIM_FOUND) ) + set( NO_XTEST_EXTENSION 1 ) +endif() + + +#### xine-engine + +pkg_search_module( XINE libxine ) + +if( NOT XINE_FOUND ) + tde_message_fatal( "Xine-lib is required but was not found on your system" ) +endif( NOT XINE_FOUND ) diff --git a/src/FAQ b/FAQ similarity index 100% rename from src/FAQ rename to FAQ diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..0a51280 --- /dev/null +++ b/INSTALL @@ -0,0 +1,29 @@ +Basic Installation +================== + +codeine relies on cmake to build. + +Here are suggested default options: + + -DCMAKE_INSTALL_PREFIX="/opt/trinity" \ + -DCONFIG_INSTALL_DIR="/etc/trinity" \ + -DSYSCONF_INSTALL_DIR="/etc/trinity" \ + -DXDG_MENU_INSTALL_DIR="/etc/xdg/menus" \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_VERBOSE_MAKEFILE="ON" \ + -DCMAKE_SKIP_RPATH="OFF" \ + -DBUILD_ALL="ON" \ + -DWITH_ALL_OPTIONS="ON" + + +Requirements: +============= + +- xine-lib + + +Optional: +========= + +- XTest +- xcb-util-keysyms diff --git a/PKGBUILD b/PKGBUILD deleted file mode 100644 index 34bc514..0000000 --- a/PKGBUILD +++ /dev/null @@ -1,17 +0,0 @@ -pkgname=codeine -pkgver=1.0.1 -pkgrel=1 -pkgdesc="A simple xine-based video player" -url="http://www.methylblue.com/codeine/" - -build() { - echo -e "\033[0;34m==>\033[0;0;1m Configure \033[0;0m" - cd "$startdir" - ./configure prefix=/opt/kde - - echo -e "\033[0;34m==>\033[0;0;1m Make \033[0;0m" - make || return 1 - - echo -e "\033[0;34m==>\033[0;0;1m Install \033[0;0m" - DESTDIR="$startdir/pkg" make install -} diff --git a/README b/README index 6f5ad6c..4d03b2c 100644 --- a/README +++ b/README @@ -1,48 +1,2 @@ -INTRODUCTION - Codeine is a very simple xine-based media player. - I make the following promises: - - * I will not add any substantial features after version 1.0.0 - * After then, improvements will only be in the realm of usability and bug - fixes - - You can rely on Codeine for now and until xine is obsolete to be a simple - no-frills video(/media) player. - - Visit #codeine on freenode.net! - - Max Howell - - -REQUIREMENTS - You will need at least: - - * Qt 3.3.0 (Qt 3.2.x may work, it is just not tested) - * KDElibs 3.3.0 - * xine-lib 1.0.0-rc4 - - You also need python installed in order to build Codeine. - - -INSTALLATION - I use scons + bksys as the build system. But you can still do the following: - - % ./configure && make && su -c "make install" - - Or if you have scons installed, simply: - - % scons && su -c "scons install" - - Note that scons is a little silly and this kind of thing doesn't work: - - % ./configure --prefix=/foo/bar --debug=full - - Instead do: - - % ./configure prefix=/foo/bar debug=full - - -TRANSLATIONS - I will make the po file available for translation at the 1.0-rc1 stage, if - you want to make a translation I thank you in advance :-) + Codeine - a very simple xine-based media player. diff --git a/SConstruct b/SConstruct deleted file mode 100644 index ef31f1b..0000000 --- a/SConstruct +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/python - -########################################### -## Common section, for loading the tools - -## Load the builders in config -env = Environment(TARGS=COMMAND_LINE_TARGETS, ARGS=ARGUMENTS, tools=['default', 'generic', 'kde', 'codeine'], toolpath=['./scons/']) - - -## 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 ) -## If you do not want to copy the whole environment, you can use this instead (HOME is necessary for uic): -#env.AppendUnique( ENV = {'PATH' : os.environ['PATH'], 'HOME' : os.environ['HOME']} ) - -## 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') -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', 'src/part', 'src/app' ] -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'] ) - -## Uncomment the following if you need threading support threading -#env.Append( CPPFLAGS = ['-DQT_THREAD_SUPPORT', '-D_REENTRANT'] ) -#if os.uname()[0] == "FreeBSD": -# env.Append(LINKFLAGS=["-pthread"]) - -## Important : export the environment so that SConscript files can the -## configuration and builders in it -Export("env") - - -def string_it(target, source, env): - print "Visit #codeine on irc.freenode.net!" - return 0 - -env.AddPostAction( "install", string_it ) - -env.SConscript( "src/SConscript", build_dir='build', duplicate=0 ) - - -if 'dist' in COMMAND_LINE_TARGETS: - - APPNAME = 'codeine' - 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() - # TODO copying the cache takes forever! delete it first - 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 \".scon*\" | xargs rm -rf") - os.popen("find "+FOLDER+" -name \"kdiss*-data\" | xargs rm -rf") - os.popen("find "+FOLDER+" -name \"*.pyc\" | xargs rm -f") - os.popen("find "+FOLDER+" -name \"*.cache.py\" | xargs rm -f") - os.popen("find "+FOLDER+" -name \"*.log\" | xargs rm -f") - os.popen("find "+FOLDER+" -name \"*.tdevelop.*\" | xargs rm -f") - os.popen("find "+FOLDER+" -name \"*~\" | xargs rm -f") - - os.popen("rm -rf "+FOLDER+"/autopackage") - os.popen("rm -rf "+FOLDER+"/build") - os.popen("rm -rf "+FOLDER+"/cache") - os.popen("rm -f " +FOLDER+"/codeine-*.tar.bz2") - os.popen("rm -f " +FOLDER+"/config.py*") - os.popen("rm -f " +FOLDER+"/src/configure.h") - os.popen("rm -f " +FOLDER+"/Doxyfile") - os.popen("rm -f " +FOLDER+"/Makefile") - os.popen("rm -rf "+FOLDER+"/packages") - os.popen("rm -rf "+FOLDER+"/screenshots") - os.popen("rm -f " +FOLDER+"/scons/signatures.dblite") - - ## 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) diff --git a/src/TODO b/TODO similarity index 100% rename from src/TODO rename to TODO diff --git a/config.h.cmake b/config.h.cmake new file mode 100644 index 0000000..67860c5 --- /dev/null +++ b/config.h.cmake @@ -0,0 +1,12 @@ +#define VERSION "@VERSION@" + +// Defined if you have fvisibility and fvisibility-inlines-hidden support. +#cmakedefine __KDE_HAVE_GCC_VISIBILITY 1 + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#cmakedefine WORDS_BIGENDIAN @WORDS_BIGENDIAN@ + +/* Defined if you don't have either the XTest headers or + the xcb-util-keysyms headers */ +#cmakedefine NO_XTEST_EXTENSION 1 diff --git a/configure b/configure deleted file mode 100755 index 83b4ab9..0000000 --- a/configure +++ /dev/null @@ -1,87 +0,0 @@ -#! /bin/sh -# TODO parse each passed argument and remove any "--" prefix - -BOLD="\033[1m" -RED="\033[91m" -GREEN="\033[92m" -YELLOW="\033[93m" -CYAN="\033[96m" -NORMAL="\033[0m" - -if command -v scons >/dev/null 2>&1; -then - SCONS=scons -else - if [ ! -e "scons/scons" ]; then - echo "" - echo -ne "Unpacking mini-scons..."$RED - - pushd scons >/dev/null 2>&1 - tar xjvf scons-mini.tar.bz2 > /dev/null 2>&1 - - if [[ "$?" == "0" ]]; then - echo -e $GREEN"done"$NORMAL - else - echo -e $RED"failed!"$NORMAL - exit 2 - fi - - popd > /dev/null - fi - - SCONS=scons/scons -fi - -if [[ "$1" == "--help" ]]; then - $SCONS -Q configure --help - exit -fi - -echo "" -echo "Configuring Codeine "`cat VERSION`"..." -echo "" - -#TODO remove all prefixed "--" - -$SCONS -Q configure $@ || exit 1 - -echo "" -echo -e "Your configure completed "$GREEN"successfully"$NORMAL", now type "$BOLD"make"$NORMAL -echo "" - -cat > Makefile << EOF -## Makefile automatically generated by unpack_local_scons.sh - -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 - diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt new file mode 100644 index 0000000..6d0aa9f --- /dev/null +++ b/doc/CMakeLists.txt @@ -0,0 +1 @@ +tde_auto_add_subdirectories( ) diff --git a/doc/en/CMakeLists.txt b/doc/en/CMakeLists.txt new file mode 100644 index 0000000..ba3ef3e --- /dev/null +++ b/doc/en/CMakeLists.txt @@ -0,0 +1 @@ +tde_create_handbook( DESTINATION ${PROJECT_NAME} ) diff --git a/doc/en/index.docbook b/doc/en/index.docbook new file mode 100644 index 0000000..c056003 --- /dev/null +++ b/doc/en/index.docbook @@ -0,0 +1,437 @@ + + + Codeine"> + + + +]> + + + + + + + + + +The &codeine; Handbook + + + +Mike +Diehl + +
madpenguin8@yahoo.com
+
+
+
+ + + + +2004 +Mike Diehl + + + +&FDLNotice; + + + +10/19/2004 +1 + + + + + +&codeine; is a simple media player for the TRINITY Desktop Environment. &codeine; is a front end to the xine multi-media player. + + + + + + +KDE +Codeine +xine +video +multi-media + + +
+ + + + +Introduction + + +&codeine; Screenshot + + +Screenshot + + + + + +&codeine; is a simple media player using the xine backend. &codeine; is a no frills media player that is especially usefull for short video clips where most other media players would just get in the way. + + + + + + +Configuring &codeine; + + + + + + + +Using &codeine; + + +Starting &codeine; +&codeine; can be started from the K-Menu, or from the command-line + + +From the K-Menu + + +Open the &kde; program menu by clicking on the big K icon on your panel. This will raise the program menu. Move your cursor up the menu to the Multimedia menu item. Choose &codeine;. + + + + + + +From the Command Line + + +You can start &codeine; by typing it's name on the command line. If you include a file name it will play the file. + + + + +%codeine + + + + + + + + + + + + +Menu and Command Reference + + +The Play Menu + + + + +Ctrlo + +Play +Play File.. + +Opens a file dialog to choose a file to play. + + + + +Play +Play Audio-CD + +Plays an Audio-CD that is in your CD-Rom drive. + + + + +Play +Play DVD + +Plays a DVD that is in your DVD drive. + + + + + + +Ctrlq + +Play +Quit + +Quits &codeine;. + + + + + + + +The Settings Menu + + + + + +Settings +Toolbars +Show Main Toolbar + +Enables or disable the main application toolbar. + + + + +Settings +Toolbars +Show DVD Toolbar + +Enables or disable the DVD toolbar. + + + + +Settings +Configure Shortcuts... + +Allows you to configure the &codeine; shortcuts. + + + + +Settings +Configure Toolbars... + +Allows you to configure the &codeine; toolbar options. + + + + +Settings +Configure Video... + +Opens a dialog for configuring the video output settings. The settings include: contrast, brightness, saturation, and hue. + + + + + + +The Help Menu + + + + +Help +&codeine; Handbook + +Opens this help document. + + + + + +ShiftF1 + +Help +What's This? + +Activates the "What's This?" mouse cursor allowing you to click an object to get a "What's this?" tooltip. + + + + +Help +Report Bug... + +Starts the bug report tool dialog window. + + + + +Help +About &codeine; + +Starts the About &codeine; dialog window. + + + + +Help +About KDE + +Starts the About &kde; dialog window. + + + + + + + + + + + + + + + + +Credits and License + + +&codeine; +Program copyright 2004 Max B. Howell max.howell@methylblue.com + +&underGPL; + + + + +Documentation + + +Documentation copyright 2004 Mike Diehl madpenguin8@yahoo.com + + +&underFDL; + + + + + + +Requirements + +&codeine; requires the installation of some software packages. The required packages are listed below. + + + +Required: +tdelibs +xine-lib + + +Optional: +XTest Library +xcb-util-keysyms + + +If you obtain these dependencies via a packaging system, you must +also install the devel versions of these packages! + + + + + +Installation + + +How to obtain &codeine; + + +&codeine; is now part of the TDE project, it can be found at: +http://trinitydesktop.org/. + + + + +Compilation and Installation + + +In order to compile and install &codeine; on your system, type the following in the base directory; distribution: + +% mkdir -p build +% cd build +% cmake ../ +% make +% make install + + + +Since &codeine; uses cmake you should have not trouble compiling it. Default options for cmake build are available in the INSTALL file. + + + + + +&documentation.index; +
+ diff --git a/doc/en/main.png b/doc/en/main.png new file mode 100644 index 0000000000000000000000000000000000000000..a13586e46a44f88049a35cc98f7d55025e122f7f GIT binary patch literal 12016 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 literal 0 HcmV?d00001 diff --git a/doc/man/CMakeLists.txt b/doc/man/CMakeLists.txt new file mode 100644 index 0000000..8512250 --- /dev/null +++ b/doc/man/CMakeLists.txt @@ -0,0 +1,5 @@ +INSTALL( + FILES ${PROJECT_NAME}.1 + DESTINATION ${MAN_INSTALL_DIR}/man1 + COMPONENT doc +) diff --git a/doc/man/codeine.1 b/doc/man/codeine.1 new file mode 100644 index 0000000..dac7494 --- /dev/null +++ b/doc/man/codeine.1 @@ -0,0 +1,94 @@ +'\" -*- coding: us-ascii -*- +.if \n(.g .ds T< \\FC +.if \n(.g .ds T> \\F[\n[.fam]] +.de URL +\\$2 \(la\\$1\(ra\\$3 +.. +.if \n(.g .mso www.tmac +.TH codeine 1 2006-05-12 "" "" +.SH NAME +codeine \- video player for TDE, designed to be as simple as possible +.SH SYNOPSIS +'nh +.fi +.ad l +\fBcodeine\fR \kx +.if (\nx>(\n(.l/2)) .nr x (\n(.l/5) +'in \n(.iu+\nxu +[ +\fB\fIQt-options\fB\fR +] [ +\fB\fTDE-options\fB\fR +] [ +\fB\fIURL|file\fB\fR +] [ +--play-dvd +] +'in \n(.iu-\nxu +.ad b +'hy +.SH DESCRIPTION +Video player with a different philosophy: Simple, uncluttered interface +.PP +Features: +.TP 0.2i +\(bu +Plays DVDs, VCDs, all video formats supported by Xine +.TP 0.2i +\(bu +Bundled with a simple web-page KPart +.TP 0.2i +\(bu +Starts quickly +.SH OPTIONS +All TDE and TQt +programs accept a some common command-line options. codeine has no +application-specific options. +.PP +.TP +\*(T<\fB\-\-help\fR\*(T> +Show help about options +.TP +\*(T<\fB\-\-help\-qt\fR\*(T> +Show TQt specific options +.TP +\*(T<\fB\-\-help\-tde\fR\*(T> +Show TDE specific options +.TP +\*(T<\fB\-\-help\-all\fR\*(T> +Show all options +.TP +\*(T<\fB\-\-author\fR\*(T> +Show author information +.TP +\*(T<\fB\-v\fR\*(T>, \*(T<\fB\-\-version\fR\*(T> +Show version information +.TP +\*(T<\fB\-\-license\fR\*(T> +Show license information +.TP +\*(T<\fB\-\-\fR\*(T> +Indicates end of options +.TP +\*(T<\fBURL|file\fR\*(T> +URL to or filename of a video +.TP +\*(T<\fB\-\-play\-dvd\fR\*(T> +Play DVD Video +.SH AUTHOR +Codeine was written by Max Howell <\*(T> +Homepage: +.URL "" https://mirror.git.trinitydesktop.org/gitea/TDE/codeine/ +.SH COPYRIGHT +This manual page was written by Achim Bohnet <\*(T>, +based on work of Anthony Mercatante +<\*(T>, for the +Debian system (but may be used by others). +Tom Albers <\*(T> documented the play-dvd part. +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU General Public License, +Version 2 or any later version published by the Free Software Foundation. +.PP +On Debian systems, the complete text of the GNU General Public Version 2 +License can be found in +\*(T<\fI/usr/share/common\-licenses/GPL\-2\fR\*(T>. diff --git a/misc/CMakeLists.txt b/misc/CMakeLists.txt new file mode 100644 index 0000000..30786a7 --- /dev/null +++ b/misc/CMakeLists.txt @@ -0,0 +1,31 @@ +##### icons + +tde_install_icons( ${PROJECT_NAME} ) + + +##### other data + +install( + FILES ${PROJECT_NAME}ui.rc + DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME} +) + +install( + FILES ${PROJECT_NAME}rc + DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME} +) + +install( + FILES ${PROJECT_NAME}.desktop + DESTINATION ${XDG_APPS_INSTALL_DIR} +) + +install( + FILES ${PROJECT_NAME}_part.desktop + DESTINATION ${SERVICES_INSTALL_DIR} +) + +install( + FILES ${PROJECT_NAME}_play_dvd.desktop + DESTINATION ${DATA_INSTALL_DIR}/konqueror/servicemenus +) diff --git a/po/messages.sh b/po/messages.sh deleted file mode 100755 index 9c2a2b1..0000000 --- a/po/messages.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/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=../src # srcdir is the directory containing the source code -TIPSDIR=$SRCDIR # tipsdir is the directory containing the tips - -TDEDIR=`tde-config --prefix` -EXTRACTRC=extractrc -KDEPOT=`tde-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 codeine.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" - diff --git a/scons/codeine.py b/scons/codeine.py deleted file mode 100644 index b56f50d..0000000 --- a/scons/codeine.py +++ /dev/null @@ -1,101 +0,0 @@ -## Max Howell, 2005 - -BOLD ="\033[1m" -RED ="\033[91m" -GREEN ="\033[92m" -YELLOW ="\033[93m" -CYAN ="\033[96m" -NORMAL ="\033[0m" - -import os - -def exists( env ): - return true - -def generate( env ): - - if 'configure' in env['TARGS']: - xine_lib_test_source_file = """ - #include - #include - - int main( int argc, char **argv ) - { - if( XINE_MAJOR_VERSION < 1 ) - return 1; - - const QString version( XINE_VERSION ); - - // eg. VERSION 1.0 - if( version[1] == '.' ) - return 0; - - if( version == "1-cvs" ) - return 0; - - if( version.startsWith( "1-rc" ) && QString(version[4]).toInt() > 3 ) - return 0; - - return 2; //too old - }""" - - def CheckKdeLibs( context ): - # ideally should be able to tell bksys what version we need - context.Message( 'Checking for KDElibs 3.3...' ) - kde_version = os.popen("tde-config --version|grep KDE").read().strip().split()[1] - result = int( kde_version[0] ) == 3 and int( kde_version[2] ) >= 3 - context.Result( result ) - return result - - def CheckXineLib( context ): - context.Message('Checking for xine-lib 1.0...') - result = context.TryLink(xine_lib_test_source_file, '.cpp') - context.Result(result) - return result - - - # prolly best to use a fresh env - # this seems to import the user's CXXFLAGS, etc., which may break - confenv = env.Copy() - configure = confenv.Configure(custom_tests = {'CheckXineLib' : CheckXineLib, 'CheckKdeLibs' : CheckKdeLibs}, log_file='configure.log') - confenv.AppendUnique(LIBS = 'tqt-mt') - confenv.AppendUnique(LINKFLAGS = '-L/usr/X11R6/lib') - - if not configure.CheckKdeLibs(): - print # 1 2 3 4 5 6 7 8' - print 'Configure could not detect KDElibs 3.3, which is required for Codeine to ' - print 'compile.' - print - confenv.Exit( 1 ) - - if not configure.CheckLibWithHeader( 'xine', 'xine.h', 'c++' ): - print # 1 2 3 4 5 6 7 8' - print 'Configure could not find either the xine library or header on your system. You ' - print 'should ammend the relevant paths. If you know which ones please email me so I ' - print 'can update this message!' - print - confenv.Exit( 2 ) - - if not configure.CheckXineLib(): - print # 1 2 3 4 5 6 7 8' - print 'Your xine-lib is either too old, or can not be linked against. Sorry for not ' - print 'being more specific..' - print - confenv.Exit( 3 ) - - if not configure.CheckLibWithHeader( 'Xtst', 'X11/extensions/XTest.h', 'c' ): - print # 1 2 3 4 5 6 7 8' - print 'libxtst was not found, this means the screensaver cannot be disabled during ' - print 'playback. YOU CAN STILL BUILD CODEINE! :)' - print - - file = open ( 'src/configure.h', 'w' ) - file.write( "#define NO_XTEST_EXTENSION\n" ) - file.close() - else: - # FIXME - thus only one thing can be in configure.h - lol - file = open ( 'src/configure.h', 'w' ) - file.write( "" ) - file.close() - - env = configure.Finish() diff --git a/scons/generic.py b/scons/generic.py deleted file mode 100644 index 3249df7..0000000 --- a/scons/generic.py +++ /dev/null @@ -1,95 +0,0 @@ -## 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[93m" -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) - - # load the options - from SCons.Options import Options, PathOption - opts = Options('generic.cache.py') - opts.AddOptions( - ( 'KDECXXFLAGS', 'debug level for the project : full or just anything' ), - ( 'PREFIX', 'prefix for installation' ), - ( 'EXTRAINCLUDES', 'extra include paths for the project' ), - ) - opts.Update(env) - - # use this to avoid an error message 'how to make target configure ?' - env.Alias('configure', None) - - # configure the environment if needed - if 'configure' in env['TARGS'] or not env.has_key('KDECXXFLAGS'): - # need debugging ? - if env.has_key('KDECXXFLAGS'): - env.__delitem__('KDECXXFLAGS') - 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', '-ggdb', '-pipe', '-Wall'] - else: - env['KDECXXFLAGS'] = ['-DDEBUG', '-g'] - else: - if os.environ.has_key('CXXFLAGS'): - # user-defined flags (gentooers will be delighted) - import SCons.Util - env['KDECXXFLAGS'] = SCons.Util.CLVar( os.environ['CXXFLAGS'] ) - env.Append( KDECXXFLAGS = ['-DNDEBUG', '-DNO_DEBUG'] ) - else: - env.Append(KDECXXFLAGS = ['-O2', '-DNDEBUG', '-DNO_DEBUG']) - - # 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') - - # and finally save the options in a cache - opts.Save('generic.cache.py', env) - - if env.has_key('KDECXXFLAGS'): - # load the flags - env.AppendUnique( CPPFLAGS = env['KDECXXFLAGS'] ) - - if env.has_key('EXTRAINCLUDES'): - incpaths = [] - for dir in str(env['EXTRAINCLUDES']).split(':'): - incpaths.append( dir ) - env.Append(CPPPATH = incpaths) - diff --git a/scons/kde.py b/scons/kde.py deleted file mode 100644 index b54057e..0000000 --- a/scons/kde.py +++ /dev/null @@ -1,771 +0,0 @@ -# Copyright (c) 2001, 2002, 2003, 2004 The SCons Foundation -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -# Shamelessly stolen from qt.py and (heavily) modified into kde.py :) -# Thomas Nagy, 2004, 2005 - -""" -Here follow the basic rules for building kde programs -The detection is done in detect_kde when needed -We wan to use the cached variables as much as possible - -The variables used when configuring are : -* prefix : base install path, eg: /usr/local -* execprefix : install path for binaries, eg: /usr/bin -* datadir : install path for the data, eg: /usr/local/share -* libdir : install path for the libs, eg: /usr/lib - -* libsuffix : for those who need /usr/lib64 and the like .. - -* kdeincludes: path to the kde includes (/usr/include/tde on debian, ...) -* qtincludes : same punishment, for qt includes (/usr/include/qt on debian, ...) - -* tdelibs : path to the kde libs, for linking the programs -* qtlibs : same punishment, for qt libraries - -eg: scons configure libdir=/usr/local/lib qtincludes=/usr/include/qt -""" - -BOLD ="\033[1m" -RED ="\033[91m" -GREEN ="\033[92m" -YELLOW ="\033[93m" -CYAN ="\033[96m" -NORMAL ="\033[0m" - -def exists(env): - return True - -def detect_kde(env): - """ Detect the qt and kde environment using tde-config mostly """ - import os, sys, re - - 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) - tdelibs = env['ARGS'].get('tdelibs', 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 tde-config : ", - kde_config = os.popen("which tde-config 2>/dev/null").read().strip() - if len(kde_config): - print GREEN + "tde-config was found" + NORMAL - else: - print RED + "tde-config was NOT found in your PATH"+ NORMAL - print "Make sure kde is installed properly" - print "(missing package tdebase-devel?)" - # TODO : prompt the user for the path of tde-config ? - sys.exit(1) - env['TDEDIR'] = os.popen('tde-config -prefix').read().strip() - - print "Checking for kde version : ", - kde_version = os.popen("tde-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: - m = re.search('(.*)/lib/libqt.*', os.popen('ldd `tde-config --expandvars --install lib`' + '/libtdeui.so.4 | 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 - sys.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 - sys.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 - sys.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 + "/ntqlayout.h"): - # The user told where to look for and it looks valid - print GREEN + "ok " + qtincludes + NORMAL - else: - if os.path.isfile(qtdir + "/include/ntqlayout.h"): - # Automatic detection - print GREEN + "ok " + qtdir + "/include/ " + NORMAL - qtincludes = qtdir + "/include/" - elif os.path.isfile("/usr/include/qt3/ntqlayout.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 - sys.exit(1) - - print "Checking for the kde includes : ", - kdeprefix = os.popen("tde-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/tde/klineedit.h"): - # Debian, Fedora probably - print YELLOW + "the kde headers were found in " + kdeprefix + "/include/tde/" + NORMAL - kdeincludes = kdeprefix + "/include/tde/" - else: - print RED + "The kde includes were NOT found" + NORMAL - sys.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('tde-config --install exe').read().strip()) - env['KDEAPPS'] = subst_vars(os.popen('tde-config --install apps').read().strip()) - env['KDEDATA'] = subst_vars(os.popen('tde-config --install data').read().strip()) - env['KDEMODULE']= subst_vars(os.popen('tde-config --install module').read().strip()) - env['KDELOCALE']= subst_vars(os.popen('tde-config --install locale').read().strip()) - env['KDEDOC'] = subst_vars( debian_fix(os.popen('tde-config --install html').read().strip()) ) - env['KDEKCFG'] = subst_vars(os.popen('tde-config --install kcfg').read().strip()) - env['KDEXDG'] = subst_vars(os.popen('tde-config --install xdgdata-apps').read().strip()) - env['KDEMENU'] = subst_vars(os.popen('tde-config --install apps').read().strip()) - env['KDEMIME'] = subst_vars(os.popen('tde-config --install mime').read().strip()) - env['KDEICONS'] = subst_vars(os.popen('tde-config --install icon').read().strip()) - env['KDESERV'] = subst_vars(os.popen('tde-config --install services').read().strip()) - else: - # the user has given no prefix, install as a normal kde app - env['PREFIX'] = os.popen('tde-config --prefix').read().strip() - - env['KDEBIN'] = os.popen('tde-config --expandvars --install exe').read().strip() - env['KDEAPPS'] = os.popen('tde-config --expandvars --install apps').read().strip() - env['KDEDATA'] = os.popen('tde-config --expandvars --install data').read().strip() - env['KDEMODULE']= os.popen('tde-config --expandvars --install module').read().strip() - env['KDELOCALE']= os.popen('tde-config --expandvars --install locale').read().strip() - env['KDEDOC'] = os.popen('tde-config --expandvars --install html').read().strip() - env['KDEKCFG'] = os.popen('tde-config --expandvars --install kcfg').read().strip() - env['KDEXDG'] = os.popen('tde-config --expandvars --install xdgdata-apps').read().strip() - env['KDEMENU'] = os.popen('tde-config --expandvars --install apps').read().strip() - env['KDEMIME'] = os.popen('tde-config --expandvars --install mime').read().strip() - env['KDEICONS'] = os.popen('tde-config --expandvars --install icon').read().strip() - env['KDESERV'] = os.popen('tde-config --expandvars --install services').read().strip() - - env['QTPLUGINS']=os.popen('tde-config --expandvars --install qtplugins').read().strip() - - ## kde libs and includes - env['KDEINCLUDEPATH']= kdeincludes - if not tdelibs: - tdelibs = os.popen('tde-config --expandvars --install lib').read().strip() - env['KDELIBPATH']= tdelibs - - ## 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/tde on debian, ...) -"""+BOLD+"""* qtincludes """+NORMAL+""": same punishment, for qt includes (/usr/include/qt on debian, ...) -"""+BOLD+"""* tdelibs """+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 os.path - import re - - import SCons.Defaults - import SCons.Tool - import SCons.Util - - ui_extensions = [".ui", ".Ui", ".UI"] - header_extensions = [".h", ".hxx", ".hpp", ".hh", ".H", ".HH"] - source_extensions = [".cpp", ".cxx", ".cc", ".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]') - - # cxx and c comment 'eater' - #comment = re.compile(r'(//.*)|(/\*(([^*])|(\*[^/]))*\*/)') - # CW: something must be wrong with the regexp. See also bug #998222 - # CURRENTLY THERE IS NO TEST CASE FOR THAT - - # 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 - opts = Options('kde.cache.py') - 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'), - ( 'TDEDIR', '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('TDEDIR'): - detect_kde(env) - - # finally save the configuration - opts.Save('kde.cache.py', 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'] = 'tqt-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 \' >> '+target[1].path) - act.append('echo \'#include \' >> '+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('tdeconfig_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'))) - - # find_file(kcfgfile, (source[0].get_dir(),) ,SCons.Node.FS.default_fs) - 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 (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' ) - -####### TODO : real libtool builder (but i hate libtool - ita) -# def libtoolGenerator(target, source, env, for_signature): -# act=[] -# act.append('libtool $LIBTOOL_FLAGS $CXX $CXXFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -c -o '+target[0].path+' '+source[0].path) -# return act -# LIBTOOL_BUILDER = Builder( -# generator = libtoolGenerator, -# suffix = '.lo', -# src_suffix = '.cpp' ) - - ##### 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']['Libtool'] = LIBTOOL_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(target, source, env): - """ - 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: - env.Dcop(bs+'.h') - src.append(bs+'_skel.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 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 tdeconfig_compiler (settings.h, settings.cpp) must not be included" - #for file in skel_files: - # for ofile in other_files: - # if ofile == file: - # print RED+"WARNING: source contain "+file+".skel and another file of the same prefix"+NORMAL - # print "Files generated automatically from .skel file must not be included (file.h, file.idl)" - - return src - - # 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'] - - def KDEinstall(path, file, lenv): - """ Quick wrapper """ - if 'install' in lenv['TARGS']: - lenv.Alias('install', lenv.Install( lenv['DESTDIR']+path, file ) ) - - def KDEinstallas(destfile, file, lenv): - """ Quick wrapper """ - if 'install' in lenv['TARGS']: - lenv.Alias('install', lenv.InstallAs( lenv['DESTDIR']+destfile, file ) ) - - def KDEprogram(target, source, lenv): - """ Makes a kde program - The program is installed except if one sets env['NOAUTOINSTALL'] """ - src = KDEfiles(target, source, lenv) - lenv.Program(target, src) - if not lenv.has_key('NOAUTOINSTALL'): - KDEinstall(env['KDEBIN'], target, lenv) - - def KDEshlib(target, source, lenv): - """ Makes a shared library for kde (.la file for klibloader) - The library is installed except if one sets env['NOAUTOINSTALL'] """ - src = KDEfiles(target, source, lenv) - lenv.SharedLibrary( target, src ) - lenv.LaFile( target, target+'.so' ) - if not lenv.has_key('NOAUTOINSTALL'): - KDEinstall(env['KDEMODULE'], target+'.so', lenv) - KDEinstall(env['KDEMODULE'], target+'.la', lenv) - - def KDEstaticlib(target, source, lenv): - """ 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 stupid limitations - (cannot handle sources in separate folders - takes extra processing) """ - src = KDEfiles(target, source, lenv) - lenv.StaticLibrary( target, src ) -# # do not install static libraries -# if not lenv.has_key('NOAUTOINSTALL'): -# KDEinstall(env['KDEMODULE'], target+'.a', lenv) - - def KDEaddlibs(libs, lenv): - """ Helper function """ - lenv.AppendUnique(LIBS = libs) - - def KDEaddpaths(paths, lenv): - """ Helper function """ - lenv.AppendUnique(CPPPATH = paths) - - def KDElang(transfiles, lenv): - """ Process translations (.po files) in a po/ dir """ - if not lenv['APPNAME']: - print "define lenv['APPNAME'] before using KDElang !!" - return - for lang in transfiles: - lenv.Transfiles( lang+'.po' ) - KDEinstallas( lenv['KDELOCALE']+'/'+lang+'/LC_MESSAGES/'+lenv['APPNAME']+'.mo', - lang+'.gmo', lenv ) - - def KDEdoc(lang, file, lenv): - """ Install the documentation """ - if not lenv['APPNAME']: - print "define lenv['APPNAME'] before using KDEdoc !!" - env.Exit(1) - KDEinstall( lenv['KDEDOC']+'/'+lang+'/'+lenv['APPNAME'], file, lenv ) - - # Export variables so that sconscripts in subdirectories can use them - env.Export("KDEprogram KDEshlib KDEaddpaths KDEaddlibs KDEinstall KDEinstallas KDElang KDEdoc") - diff --git a/scons/scons-mini.tar.bz2 b/scons/scons-mini.tar.bz2 deleted file mode 100644 index 0c1ce52ebd59ae92d9a03a288b1922110cc899b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58214 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 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..a4228f6 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory( app ) +add_subdirectory( part ) diff --git a/src/SConscript b/src/SConscript deleted file mode 100644 index 31c1933..0000000 --- a/src/SConscript +++ /dev/null @@ -1,21 +0,0 @@ - -############################ -## load the config - -## Use the environment and the tools set in the top-level -## SConstruct file (set with 'Export') - this is very important - -Import( '*' ) -myenv=env.Copy() - -myenv.SConscript( dirs = Split( "app part") ) - -KDEinstall( env['KDEDATA']+'/codeine', '../misc/codeineui.rc', myenv ) -KDEinstall( env['KDEDATA']+'/konqueror/servicemenus', '../misc/codeine_play_dvd.desktop', myenv ) -KDEinstall( env['KDESERV'], '../misc/codeine_part.desktop', myenv ) -KDEinstall( env['KDEXDG'], '../misc/codeine.desktop', myenv ) - -for size in ['16', '22', '32', '48', '64', '128']: - KDEinstallas( env['KDEICONS']+'/crystalsvg/'+size+'x'+size+'/apps/codeine.png', '../misc/cr'+size+'-app-codeine.png', myenv ) - -#print env['KDECXXFLAGS'] \ No newline at end of file diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt new file mode 100644 index 0000000..60a21e4 --- /dev/null +++ b/src/app/CMakeLists.txt @@ -0,0 +1,54 @@ +include_directories( + ${CMAKE_BINARY_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} + ${XINE_INCLUDE_DIRS} + ${X11_INCLUDE_DIR} + ${X11_XTEST_INCLUDE_DIRS} + ${X11_KEYSIM_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} + ${TDE_LIB_DIR} +) + + +##### codeine (executable) + +tde_add_executable( ${PROJECT_NAME} AUTOMOC + + SOURCES + xineEngine.cpp + xineConfig.cpp + xineScope.c + theStream.cpp + videoWindow.cpp + videoSettings.cpp + captureFrame.cpp + actions.cpp + stateChange.cpp + slider.cpp + analyzer.cpp + playDialog.cpp + listView.cpp + adjustSizeButton.cpp + fullScreenAction.cpp + insertAspectRatioMenuItems.cpp + playlistFile.cpp + volumeAction.cpp + ../mxcl.library.cpp + main.cpp + mainWindow.cpp + LINK + tdecore-shared + tdeui-shared + tdeio-shared + ${XINE_LIBRARIES} + ${X11_LIBRARIES} + ${X11_XTEST_LIBRARIES} + + DESTINATION ${BIN_INSTALL_DIR} +) diff --git a/src/app/SConscript b/src/app/SConscript deleted file mode 100644 index bb402f3..0000000 --- a/src/app/SConscript +++ /dev/null @@ -1,59 +0,0 @@ - -############################ -## load the config - -## Use the environment and the tools set in the top-level -## SConstruct file (set with 'Export') - this is very important - -Import( '*' ) -myenv=env.Copy() - -############################# -## the programs to build - -# we put the stuff that could fail due to bad xine.h locations, etc. at the beginning -# so if the build fails the user knows quickly -app_sources = Split(""" - xineEngine.cpp - xineConfig.cpp - xineScope.c - theStream.cpp - videoWindow.cpp - videoSettings.cpp - captureFrame.cpp - - actions.cpp - stateChange.cpp - slider.cpp - analyzer.cpp - playDialog.cpp - listView.cpp - adjustSizeButton.cpp - fullScreenAction.cpp - insertAspectRatioMenuItems.cpp - playlistFile.cpp - volumeAction.cpp - - ../mxcl.library.cpp - - main.cpp - mainWindow.cpp""") - -KDEprogram( "codeine", app_sources, myenv ) - - -############################ -## Customization - -## Additional include paths for compiling the source files -## Always add '../' (top-level directory) because moc makes code that needs it -KDEaddpaths( ['./', '../', '../../'], myenv ) - -## Necessary libraries to link against -KDEaddlibs( ['tqt-mt', 'tdeio', 'tdecore', 'tdeui', 'xine', 'Xtst'], myenv ) - -## This shows how to add other link flags to the program -myenv['LINKFLAGS'].append('-L/usr/X11R6/lib') - -## If you are using QThread, add this line -# myenv.AppendUnique( CPPFLAGS = ['-DQT_THREAD_SUPPORT'] ) diff --git a/src/app/actions.cpp b/src/app/actions.cpp index 1612a57..7447320 100644 --- a/src/app/actions.cpp +++ b/src/app/actions.cpp @@ -2,9 +2,9 @@ // See COPYING file for licensing information #include "actions.h" -#include "debug.h" -#include "mxcl.library.h" -#include +#include "../debug.h" +#include "../mxcl.library.h" +#include #include "xineEngine.h" namespace Codeine diff --git a/src/app/adjustSizeButton.cpp b/src/app/adjustSizeButton.cpp index 3a5c1dd..e1bf5b1 100644 --- a/src/app/adjustSizeButton.cpp +++ b/src/app/adjustSizeButton.cpp @@ -4,11 +4,11 @@ #include "adjustSizeButton.h" #include "extern.h" #include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include "theStream.h" #include "xineEngine.h" //videoWindow() diff --git a/src/app/adjustSizeButton.h b/src/app/adjustSizeButton.h index 9becd95..0dbe432 100644 --- a/src/app/adjustSizeButton.h +++ b/src/app/adjustSizeButton.h @@ -4,7 +4,7 @@ #ifndef CODEINE_ADJUST_SIZE_BUTTON_H #define CODEINE_ADJUST_SIZE_BUTTON_H -#include +#include namespace Codeine { diff --git a/src/app/analyzer.cpp b/src/app/analyzer.cpp index 593bd16..9d3da06 100644 --- a/src/app/analyzer.cpp +++ b/src/app/analyzer.cpp @@ -2,10 +2,10 @@ // See COPYING file for licensing information #include "analyzer.h" -#include "codeine.h" -#include "debug.h" +#include "../codeine.h" +#include "../debug.h" #include //interpolate() -#include //event() +#include //event() #include "xineEngine.h" #include "fht.cpp" @@ -83,7 +83,7 @@ Analyzer::Base2D::resizeEvent( TQResizeEvent* ) // Author: Max Howell , (C) 2003 // Copyright: See COPYING file that comes with this distribution -#include +#include Analyzer::Block::Block( TQWidget *parent ) : Analyzer::Base2D( parent, 20 ) @@ -108,7 +108,7 @@ Analyzer::Block::transform( Analyzer::Scope &scope ) //pure virtual fht.scale( front, 1.0 / 40 ); } -#include + void Analyzer::Block::analyze( const Analyzer::Scope &s ) { @@ -129,3 +129,5 @@ Analyzer::Block::heightForWidth( int w ) const { return w / 2; } + +#include "analyzer.moc" diff --git a/src/app/analyzer.h b/src/app/analyzer.h index edd526e..9a5af00 100644 --- a/src/app/analyzer.h +++ b/src/app/analyzer.h @@ -8,9 +8,9 @@ #include #endif -#include //stack allocated and convenience -#include //stack allocated -#include //baseclass +#include //stack allocated and convenience +#include //stack allocated +#include //baseclass #include //included for convenience namespace Analyzer diff --git a/src/app/captureFrame.cpp b/src/app/captureFrame.cpp index 6043b76..3be0e9f 100644 --- a/src/app/captureFrame.cpp +++ b/src/app/captureFrame.cpp @@ -1,21 +1,21 @@ // (C) 2005 Max Howell (max.howell@methylblue.com) // See COPYING file for licensing information -#include "debug.h" +#include "../debug.h" #include #include #include #include #include #include "mainWindow.h" -#include "mxcl.library.h" -#include -#include -#include -#include -#include -#include -#include +#include "../mxcl.library.h" +#include +#include +#include +#include +#include +#include +#include #include "theStream.h" #include "xineEngine.h" #include diff --git a/src/app/config.h b/src/app/codeineConfig.h similarity index 100% rename from src/app/config.h rename to src/app/codeineConfig.h diff --git a/src/app/fullScreenAction.cpp b/src/app/fullScreenAction.cpp index 3787a33..006164d 100644 --- a/src/app/fullScreenAction.cpp +++ b/src/app/fullScreenAction.cpp @@ -5,7 +5,7 @@ #include "fullScreenAction.h" #include #include -#include +#include #include "xineEngine.h" //videoWindow() diff --git a/src/app/insertAspectRatioMenuItems.cpp b/src/app/insertAspectRatioMenuItems.cpp index 2e2824c..81ad0b3 100644 --- a/src/app/insertAspectRatioMenuItems.cpp +++ b/src/app/insertAspectRatioMenuItems.cpp @@ -1,7 +1,7 @@ // Copyright 2005 Max Howell (max.howell@methylblue.com) // See COPYING file for licensing information -#include +#include #include TQString i18n( const char *text ); diff --git a/src/app/main.cpp b/src/app/main.cpp index a024d5d..299df88 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -1,7 +1,7 @@ // (c) 2004 Max Howell (max.howell@methylblue.com) // See COPYING file for licensing information -#include "codeine.h" +#include "../codeine.h" #include #include #include @@ -13,8 +13,8 @@ static TDEAboutData aboutData( APP_NAME, I18N_NOOP(PRETTY_NAME), APP_VERSION, I18N_NOOP("A video player that has a usability focus"), TDEAboutData::License_GPL_V2, I18N_NOOP("Copyright 2006, Max Howell"), 0, - "http://www.methylblue.com/codeine/", - "codeine@methylblue.com" ); + "https://mirror.git.trinitydesktop.org/gitea/TDE/codeine", + 0 ); static const TDECmdLineOptions options[] = { { "+[URL]", I18N_NOOP( "Play 'URL'" ), 0 }, diff --git a/src/app/mainWindow.cpp b/src/app/mainWindow.cpp index ac054ac..b31806b 100644 --- a/src/app/mainWindow.cpp +++ b/src/app/mainWindow.cpp @@ -1,12 +1,15 @@ // (C) 2005 Max Howell (max.howell@methylblue.com) // See COPYING file for licensing information +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include "actions.h" #include "analyzer.h" -#include "config.h" -#include "configure.h" +#include "codeineConfig.h" #include -#include "debug.h" +#include "../debug.h" #include "extern.h" //dialog creation function definitions #include "fullScreenAction.h" #include @@ -23,13 +26,13 @@ #include "mainWindow.h" #include "playDialog.h" //::play() #include "playlistFile.h" -#include "mxcl.library.h" -#include -#include -#include //::stateChanged() -#include //ctor -#include //because XMLGUI is poorly designed -#include +#include "../mxcl.library.h" +#include +#include +#include //::stateChanged() +#include //ctor +#include //because XMLGUI is poorly designed +#include #include "slider.h" #include "theStream.h" #include "volumeAction.h" @@ -712,3 +715,5 @@ action( const char *name ) } } //namespace Codeine + +#include "mainWindow.moc" diff --git a/src/app/mainWindow.h b/src/app/mainWindow.h index a6c7d48..0b44d0c 100644 --- a/src/app/mainWindow.h +++ b/src/app/mainWindow.h @@ -4,7 +4,7 @@ #ifndef CODEINEMAINWINDOW_H #define CODEINEMAINWINDOW_H -#include "codeine.h" +#include "../codeine.h" #include class KURL; diff --git a/src/app/playDialog.cpp b/src/app/playDialog.cpp index b6cacaa..ab650b9 100644 --- a/src/app/playDialog.cpp +++ b/src/app/playDialog.cpp @@ -1,7 +1,7 @@ // (C) 2005 Max Howell (max.howell@methylblue.com) // See COPYING file for licensing information -#include "config.h" +#include "codeineConfig.h" #include "listView.cpp" #include #include @@ -10,11 +10,11 @@ #include #include #include "playDialog.h" -#include "mxcl.library.h" -#include -#include -#include -#include +#include "../mxcl.library.h" +#include +#include +#include +#include TQString i18n( const char *text ); @@ -112,3 +112,5 @@ PlayDialog::done( TQListViewItem *item ) } } + +#include "playDialog.moc" diff --git a/src/app/playDialog.h b/src/app/playDialog.h index 2bbc37d..1c84e2d 100644 --- a/src/app/playDialog.h +++ b/src/app/playDialog.h @@ -5,7 +5,7 @@ #define CODEINEPLAYDIALOG_H #include -#include +#include class TDEListView; class TQBoxLayout; diff --git a/src/app/playlistFile.cpp b/src/app/playlistFile.cpp index 83b1f5d..d520fa2 100644 --- a/src/app/playlistFile.cpp +++ b/src/app/playlistFile.cpp @@ -5,13 +5,13 @@ //TODO error messages that vary depending on if the file is remote or not -#include "codeine.h" -#include "debug.h" +#include "../codeine.h" +#include "../debug.h" #include #include "playlistFile.h" -#include -#include -#include +#include +#include +#include "../mxcl.library.h" PlaylistFile::PlaylistFile( const KURL &url ) diff --git a/src/app/slider.cpp b/src/app/slider.cpp index 205a3b8..172c15d 100644 --- a/src/app/slider.cpp +++ b/src/app/slider.cpp @@ -1,14 +1,14 @@ // (c) 2004 Max Howell (max.howell@methylblue.com) // See COPYING file for licensing information -#include "debug.h" +#include "../debug.h" #include "slider.h" -#include -#include -#include -#include +#include +#include +#include +#include -#include +#include #include "xineEngine.h" using Codeine::Slider; @@ -143,3 +143,5 @@ Slider::setValue( int newValue ) else m_prevValue = newValue; } + +#include "slider.moc" diff --git a/src/app/slider.h b/src/app/slider.h index b7cbae0..e739d72 100644 --- a/src/app/slider.h +++ b/src/app/slider.h @@ -4,7 +4,7 @@ #ifndef CODEINESLIDER_H #define CODEINESLIDER_H -#include +#include namespace Codeine { diff --git a/src/app/stateChange.cpp b/src/app/stateChange.cpp index d547ff1..15846f5 100644 --- a/src/app/stateChange.cpp +++ b/src/app/stateChange.cpp @@ -3,16 +3,16 @@ #include "actions.h" #include "adjustSizeButton.h" -#include "debug.h" +#include "../debug.h" #include "mainWindow.h" #include #include -#include "mxcl.library.h" -#include -#include -#include -#include -#include +#include "../mxcl.library.h" +#include +#include +#include +#include +#include #include "theStream.h" #include "videoSettings.h" //FIXME unfortunate #include "xineEngine.h" diff --git a/src/app/theStream.cpp b/src/app/theStream.cpp index 246e84d..fbb35ac 100644 --- a/src/app/theStream.cpp +++ b/src/app/theStream.cpp @@ -2,7 +2,7 @@ // See COPYING file for licensing information #include -#include "mxcl.library.h" +#include "../mxcl.library.h" #include "theStream.h" #include #include "xineEngine.h" diff --git a/src/app/theStream.h b/src/app/theStream.h index c71b5e8..7679a10 100644 --- a/src/app/theStream.h +++ b/src/app/theStream.h @@ -4,10 +4,10 @@ #ifndef CODEINE_THESTREAM_H #define CODEINE_THESTREAM_H -#include "config.h" // needed for inline functions +#include "codeineConfig.h" // needed for inline functions #include // larger :( but no macros at least -#include // small header -#include // small header +#include // small header +#include // small header /// for purely static classes #define CODEINE_NO_EXPORT( T ) \ diff --git a/src/app/videoSettings.cpp b/src/app/videoSettings.cpp index 19323d8..cf759c2 100644 --- a/src/app/videoSettings.cpp +++ b/src/app/videoSettings.cpp @@ -2,10 +2,10 @@ // See COPYING file for licensing information #include -#include "mxcl.library.h" -#include -#include -#include +#include "../mxcl.library.h" +#include +#include +#include #include "videoSettings.h" #include #include "xineEngine.h" diff --git a/src/app/videoSettings.h b/src/app/videoSettings.h index c781169..0568cde 100644 --- a/src/app/videoSettings.h +++ b/src/app/videoSettings.h @@ -4,7 +4,7 @@ #ifndef CODEINE_VIDEO_SETTINGS_H #define CODEINE_VIDEO_SETTINGS_H -#include "codeine.h" +#include "../codeine.h" #include diff --git a/src/app/videoWindow.cpp b/src/app/videoWindow.cpp index 0e7d19f..2ecf65a 100644 --- a/src/app/videoWindow.cpp +++ b/src/app/videoWindow.cpp @@ -6,15 +6,15 @@ #include "actions.h" #include //std::log10 #include -#include "debug.h" +#include "../debug.h" #include //::makeStandardCaption #include #include #include #include -#include "mxcl.library.h" -#include -#include +#include "../mxcl.library.h" +#include +#include #include "slider.h" #include "theStream.h" #include diff --git a/src/app/volumeAction.cpp b/src/app/volumeAction.cpp index f9a1951..0c0b81c 100644 --- a/src/app/volumeAction.cpp +++ b/src/app/volumeAction.cpp @@ -3,14 +3,14 @@ #include #include -#include -#include -#include -#include +#include +#include +#include +#include -#include "debug.h" +#include "../debug.h" #include "volumeAction.h" -#include "volumeAction.moc" + #include "xineEngine.h" @@ -112,3 +112,5 @@ VolumeAction::eventFilter( TQObject *o, TQEvent *e ) return false; } } + +#include "volumeAction.moc" diff --git a/src/app/xineConfig.cpp b/src/app/xineConfig.cpp index 07d402f..7be1c76 100644 --- a/src/app/xineConfig.cpp +++ b/src/app/xineConfig.cpp @@ -1,21 +1,21 @@ // (C) 2005 Max Howell (max.howell@methylblue.com) // See COPYING file for licensing information -#include "debug.h" +#include "../debug.h" #include // XineConfigDialog::ctor -> to get the iconloader #include #include // XineConfigDialog::ctor #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include "xineConfig.h" @@ -185,7 +185,7 @@ XineConfigDialog::isUnsavedSettings() const return false; } -#include +#include void XineConfigDialog::saveSettings() { diff --git a/src/app/xineConfig.h b/src/app/xineConfig.h index 7eb9ab8..5dc05f2 100644 --- a/src/app/xineConfig.h +++ b/src/app/xineConfig.h @@ -5,7 +5,7 @@ #define XINECONFIG_H #include -#include +#include class KComboBox; class KLineEdit; diff --git a/src/app/xineEngine.cpp b/src/app/xineEngine.cpp index 9a7b709..295d155 100644 --- a/src/app/xineEngine.cpp +++ b/src/app/xineEngine.cpp @@ -5,14 +5,14 @@ #include "actions.h" //::seek() FIXME unfortunate #include //the fade out -#include "config.h" -#include "debug.h" +#include "codeineConfig.h" +#include "../debug.h" #include #include -#include "mxcl.library.h" -#include //::sendEvent() -#include //record() -#include //::exists() +#include "../mxcl.library.h" +#include //::sendEvent() +#include //record() +#include //::exists() #include "slider.h" #include "theStream.h" #include @@ -21,7 +21,6 @@ #include #include - #define XINE_SAFE_MODE 1 extern "C" { void _debug( const char *string ) { debug() << string; } } //FIXME @@ -876,3 +875,5 @@ VideoWindow::fileFilter() const } } //namespace Codeine + +#include "xineEngine.moc" diff --git a/src/app/xineEngine.h b/src/app/xineEngine.h index f1b49c3..57017ce 100644 --- a/src/app/xineEngine.h +++ b/src/app/xineEngine.h @@ -4,9 +4,9 @@ #ifndef CODEINE_VIDEOWINDOW_H #define CODEINE_VIDEOWINDOW_H -#include "codeine.h" -#include -#include +#include "../codeine.h" +#include +#include #include #include #include diff --git a/src/debug.h b/src/debug.h index 436cceb..9214083 100644 --- a/src/debug.h +++ b/src/debug.h @@ -6,8 +6,8 @@ #define CODEINE_DEBUG_H #include -#include -#include +#include +#include #include class TQApplication; ///@see Debug::Indent diff --git a/src/mxcl.library.cpp b/src/mxcl.library.cpp index 45c8ce4..786524a 100644 --- a/src/mxcl.library.cpp +++ b/src/mxcl.library.cpp @@ -2,7 +2,7 @@ // See COPYING file for licensing information #include "mxcl.library.h" -#include +#include #include namespace mxcl diff --git a/src/mxcl.library.h b/src/mxcl.library.h index 57eca2c..78dc9c6 100644 --- a/src/mxcl.library.h +++ b/src/mxcl.library.h @@ -17,7 +17,7 @@ namespace mxcl /// almost always negates the need to #include in implementations -#include +#include TQString i18n( const char *text ); diff --git a/src/part/CMakeLists.txt b/src/part/CMakeLists.txt new file mode 100644 index 0000000..d544001 --- /dev/null +++ b/src/part/CMakeLists.txt @@ -0,0 +1,36 @@ +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_BINARY_DIR} + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} + ${XINE_INCLUDE_DIRS} + ${X11_INCLUDE_DIR} +) + +link_directories( + ${TQT_LIBRARY_DIRS} + ${TDE_LIB_DIR} +) + + + +##### codeine (shared) + +tde_add_library( ${PROJECT_NAME} SHARED AUTOMOC + + SOURCES + part.cpp + xineEngine.cpp + videoWindow.cpp + toolbar.cpp + ../mxcl.library.cpp + LINK + tdecore-shared + tdeui-shared + tdeparts-shared + ${XINE_LIBRARIES} + ${X11_LIBRARIES} + + DESTINATION ${LIB_INSTALL_DIR} +) diff --git a/src/part/SConscript b/src/part/SConscript deleted file mode 100644 index ff2d085..0000000 --- a/src/part/SConscript +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright 2005 Max Howell - -Import( "*" ) -myenv=env.Copy() - -## Additional paths for compiling the source files -## Always add '../' (top-level directory) because moc makes code that needs it -KDEaddpaths( ['./', '../', '../../'], myenv ) - -KDEaddlibs( ['tqt-mt', 'tdecore', 'tdeui', 'tdeparts', 'xine'], myenv ) - -KDEshlib( "libcodeine", Split( "part.cpp xineEngine.cpp videoWindow.cpp toolbar.cpp ../mxcl.library.cpp" ), myenv ) diff --git a/src/part/part.cpp b/src/part/part.cpp index f251731..6490e67 100644 --- a/src/part/part.cpp +++ b/src/part/part.cpp @@ -1,17 +1,17 @@ // Author: Max Howell , (C) 2005 // Copyright: See COPYING file that comes with this distribution -#include "codeine.h" -#include "debug.h" +#include "../codeine.h" +#include "../debug.h" #include #include #include "part.h" -#include +#include #include "toolbar.h" #include "videoWindow.h" #include -#include +#include namespace Codeine { diff --git a/src/part/toolbar.cpp b/src/part/toolbar.cpp index 87caa62..cdf85c3 100644 --- a/src/part/toolbar.cpp +++ b/src/part/toolbar.cpp @@ -2,8 +2,8 @@ // See COPYING file for licensing information #include -#include -#include +#include +#include #include "toolbar.h" @@ -41,4 +41,4 @@ MouseOverToolBar::eventFilter( TQObject *o, TQEvent *e ) } return false; -} \ No newline at end of file +} diff --git a/src/part/videoWindow.cpp b/src/part/videoWindow.cpp index 53cd0dd..79d09ae 100644 --- a/src/part/videoWindow.cpp +++ b/src/part/videoWindow.cpp @@ -4,10 +4,10 @@ #define CODEINE_DEBUG_PREFIX "videoWindow" #include -#include "debug.h" -#include //sendEvent() -#include -#include +#include "../debug.h" +#include //sendEvent() +#include +#include #include "videoWindow.h" #include //TODO this breaks compile for lots of people due to excessive macro content #include //x11_visual_t diff --git a/src/part/videoWindow.h b/src/part/videoWindow.h index 0d0e4d5..76d2b6c 100644 --- a/src/part/videoWindow.h +++ b/src/part/videoWindow.h @@ -5,8 +5,8 @@ #define CODEINE_VIDEO_WINDOW_H #include "../codeine.h" -#include -#include +#include +#include #include typedef struct xine_s xine_t; diff --git a/src/part/xineEngine.cpp b/src/part/xineEngine.cpp index 8424f37..5069e40 100644 --- a/src/part/xineEngine.cpp +++ b/src/part/xineEngine.cpp @@ -3,13 +3,13 @@ #define CODEINE_DEBUG_PREFIX "engine" -#include "debug.h" +#include "../debug.h" #include #include -#include "mxcl.library.h" -#include //::sendEvent() -#include //::play() -#include //TQDir::homeDir() +#include "../mxcl.library.h" +#include //::sendEvent() +#include //::play() +#include //TQDir::homeDir() #include #include "videoWindow.h" @@ -343,3 +343,5 @@ VideoWindow::xineEventListener( void *p, const xine_event_t* xineEvent ) } } //namespace Codeine + +#include "videoWindow.moc" diff --git a/translations/CMakeLists.txt b/translations/CMakeLists.txt new file mode 100644 index 0000000..42b186a --- /dev/null +++ b/translations/CMakeLists.txt @@ -0,0 +1 @@ +tde_auto_add_subdirectories() diff --git a/translations/messages/CMakeLists.txt b/translations/messages/CMakeLists.txt new file mode 100644 index 0000000..75c89f8 --- /dev/null +++ b/translations/messages/CMakeLists.txt @@ -0,0 +1,14 @@ +file( GLOB_RECURSE po_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.po ) +string( REGEX REPLACE "[ \r\n\t]+" ";" _linguas "$ENV{LINGUAS}" ) + +foreach( _po ${po_files} ) + get_filename_component( _lang ${_po} NAME_WE ) + if( "${_linguas}" MATCHES "^;*$" OR ";${_linguas};" MATCHES ";${_lang};" ) + if( "${_po}" MATCHES "^([^/]*)/.*" ) + string( REGEX REPLACE "^([^/]*)/.*" "\\1" _component "${_po}" ) + else( ) + set( _component "${PROJECT_NAME}" ) + endif( ) + tde_create_translation( FILES ${_po} LANG ${_lang} OUTPUT_NAME ${_component} ) + endif( ) +endforeach( ) diff --git a/po/codeine.pot b/translations/messages/codeine.pot similarity index 100% rename from po/codeine.pot rename to translations/messages/codeine.pot