mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
Changes in build scripts
Changed SharedLibrary rule so it can generate .la files, like libtool Added some bluring of preview image, although it pretty sucks emountd will now use global HAL flags and libraries
This commit is contained in:
parent
85aee53848
commit
5155215b68
1
Jamfile
1
Jamfile
@ -22,6 +22,7 @@ SubInclude TOP ede-conf ;
|
||||
SubInclude TOP ede-crasher ;
|
||||
SubInclude TOP ede-desktop ;
|
||||
SubInclude TOP ede-desktop-conf ;
|
||||
SubInclude TOP ede-screensaver-conf ;
|
||||
#SubInclude TOP edewm ;
|
||||
SubInclude TOP efiler ;
|
||||
SubInclude TOP ede-help ;
|
||||
|
@ -8,7 +8,9 @@
|
||||
# GNU General Public License version 2 or newer.
|
||||
# See COPYING for details.
|
||||
|
||||
SUFSHAREDLIB = ".so" ;
|
||||
SUFOBJ_SHARED = ".lo" ;
|
||||
SUFLIB_SHARED = ".so" ;
|
||||
SUFLA_SHARED = ".la" ;
|
||||
|
||||
# StaticLibrary [lib-name] : [source-files] ;
|
||||
rule StaticLibrary
|
||||
@ -18,93 +20,129 @@ rule StaticLibrary
|
||||
|
||||
rule SharedLibraryFromObjects
|
||||
{
|
||||
if ! $(UNIX) {
|
||||
Echo "Dynamic libraries can't be built on this OS now" ;
|
||||
return ;
|
||||
local _i _l _l_so _l_la _s ;
|
||||
|
||||
# Add grist to file names
|
||||
_s = [ FGristFiles $(3) ] ;
|
||||
_l = $(1:S=$(SUFLIB_SHARED).$(2)) ;
|
||||
|
||||
# for sonames; it accept only libname.so
|
||||
_l_so = $(1:S=$(SUFLIB_SHARED)) ;
|
||||
_l_so = $(_l_so:BSR=) ;
|
||||
|
||||
# libname.la file
|
||||
_l_la = $(_l_so:S=$(SUFLA_SHARED)) ;
|
||||
|
||||
# library depends on its member objects
|
||||
if $(KEEPOBJS) {
|
||||
LocalDepends obj : $(_s) ;
|
||||
} else {
|
||||
LocalDepends lib : $(_l) ;
|
||||
}
|
||||
|
||||
local s t t_only ;
|
||||
# Set LOCATE for the library and its contents. The bound
|
||||
# value shows up as $(NEEDLIBS) on the Link actions.
|
||||
# For compatibility, we only do this if the library doesn't
|
||||
# already have a path.
|
||||
|
||||
t = $(1) ;
|
||||
s = [ FGristFiles $(2) ] ;
|
||||
|
||||
# Rip directory and grist parts from target because this will
|
||||
# be passed to compiler as soname
|
||||
t_only = $(t:D=:G=) ;
|
||||
|
||||
# if given suffix, skip it; otherwise add SUFSHAREDLIB
|
||||
if ! $(t:S) {
|
||||
t = $(t:S=$(SUFSHAREDLIB)) ;
|
||||
if ! $(_l:D) {
|
||||
MakeLocate $(_l) : $(LOCATE_TARGET) ;
|
||||
}
|
||||
|
||||
LocalDepends lib : $(t) ;
|
||||
# we never scan shared libraries for member objects
|
||||
LocalDepends $(_l) : $(_s) ;
|
||||
|
||||
# This is used if library already does not have a path
|
||||
if ! $(t:D) {
|
||||
MakeLocate $(t) $(t)($(s:BS)) : $(LOCATE_TARGET) ;
|
||||
# clean library
|
||||
LocalClean clean : $(_l) ;
|
||||
|
||||
if $(OS) = "SOLARIS" {
|
||||
# solaris have other options for soname creation
|
||||
LINKFLAGS on $(_l) = -h $(_l_so) -G [ on $(_l) return $(LINKFLAGS) ] ;
|
||||
} else {
|
||||
# let linker knows we are making shared library by adding -shared and -Wl,-soname libname.so flags
|
||||
LINKFLAGS on $(_l) = -Wl,-soname,$(_l_so) -shared [ on $(_l) return $(LINKFLAGS) ] ;
|
||||
}
|
||||
|
||||
LINKLIBS on $(t) = -shared -Wl,-soname,\"$(t_only)\" [ on $(t) return $(LINKLIBS) ] ;
|
||||
# make it
|
||||
Link $(_l) : $(_s) ;
|
||||
|
||||
# Let target is dependant on source
|
||||
LocalDepends $(t) : $(s) ;
|
||||
# make a link
|
||||
SymLink $(_l_so) : $(_l) ;
|
||||
|
||||
Link $(t) : $(s) ;
|
||||
LocalClean clean : $(t) ;
|
||||
# let link be created in directory where libname.so.X.X.X exists
|
||||
MakeLocate $(_l_so) : $(_l:D) ;
|
||||
LocalDepends lib : $(_l_so) ;
|
||||
|
||||
# generate libname.la file
|
||||
DLNAME1 on $(_l_la) = $(_l_so) ;
|
||||
DLNAME2 on $(_l_la) = $(_l:BSR=) ;
|
||||
GenLa $(_l_la) ;
|
||||
LocalClean clean : $(_l_la) ;
|
||||
LocalClean clean : $(_l_so) ;
|
||||
|
||||
# let libname.la be created in directory where libname.so.X.X.X exists
|
||||
MakeLocate $(_l_la) : $(_l:D) ;
|
||||
LocalDepends lib : $(_l_la) ;
|
||||
}
|
||||
|
||||
# SharedLibrary [libname] : [sources] ;
|
||||
# Creates shared library [libname] from [sources].
|
||||
#
|
||||
# Note: ftjam in later versions provide rule with the same name, althought it calls
|
||||
# libtool in the background. The way jam works, selecting latest redefined rules, ftjam's
|
||||
# will be overriden with this.
|
||||
rule SharedObjects
|
||||
{
|
||||
# temporary replace SUFOBJ since Objects rule use it
|
||||
local SUFOBJ = $(SUFOBJ_SHARED) ;
|
||||
|
||||
ObjectCcFlags $(<) : -fPIC ;
|
||||
ObjectC++Flags $(<) : -fPIC ;
|
||||
|
||||
# call the normal Objects rule
|
||||
Objects $(<) ;
|
||||
}
|
||||
|
||||
# SharedLibrary [library] : [version] : [source] ;
|
||||
# Creates shared library ala libtool
|
||||
rule SharedLibrary
|
||||
{
|
||||
local shlib = $(1) ;
|
||||
local src = $(2) ;
|
||||
local objects = [ FGristFiles $(src:S=$(SUFOBJ)) ] ;
|
||||
|
||||
CCFLAGS on $(objects) += -fPIC ;
|
||||
C++FLAGS on $(objects) += -fPIC ;
|
||||
|
||||
SharedLibraryFromObjects $(shlib) : $(objects) ;
|
||||
Objects $(src) ;
|
||||
}
|
||||
|
||||
# SharedLibraryVersioned [libname] : [sources] : [opt-version] : ["nolink"] ;
|
||||
# Creates versioned shared library (foo.so.[version]) which is often library naming
|
||||
# on unix platforms. If [opt-version] is not given, it is like calling SharedLibrary only.
|
||||
# By default it will create, besides [libname], ".so" symlink to it too. If "nolink" is given
|
||||
# as 4 parameter, it will skip symlink creation.
|
||||
rule SharedLibraryVersioned
|
||||
{
|
||||
if $(3) {
|
||||
local target target_dir symlink versioned ;
|
||||
|
||||
# Set .so.version extension
|
||||
versioned = "$(SUFSHAREDLIB).$(3)" ;
|
||||
|
||||
# Jam is not smart about ripping suffixes so cases 'foo.so.2.0'
|
||||
# will produce 'foo.so.2'. We must hope that provided [libname] does _not_
|
||||
# have full name or everything will be screwed up (no facility in jam to check this).
|
||||
# With good hopes, we set first full target name and it's link abbreviation.
|
||||
target = $(1:S=$(versioned)) ;
|
||||
symlink = $(1:S=$(SUFSHAREDLIB)) ;
|
||||
SharedLibrary $(target) : $(2) ;
|
||||
|
||||
# Create symlink
|
||||
if $(4) != "nolink" {
|
||||
# copy target directory or symlink will be created
|
||||
# from place where jam is called
|
||||
LOCATE on $(symlink) = [ on $(target) return $(LOCATE) ] ;
|
||||
|
||||
LocalDepends lib : $(symlink) ;
|
||||
|
||||
SymLink $(symlink) : $(target) ;
|
||||
LocalClean clean : $(symlink) ;
|
||||
}
|
||||
} else {
|
||||
SharedLibrary $(1) : $(2) ;
|
||||
if ! $(UNIX) {
|
||||
Exit "Don't know how to build shared libraries on this platform" ;
|
||||
}
|
||||
|
||||
SharedLibraryFromObjects $(1) : $(2) : $(3:S=$(SUFOBJ_SHARED)) ;
|
||||
SharedObjects $(3) ;
|
||||
}
|
||||
|
||||
# .la files are generated by libtool and we emulate that too
|
||||
# NOTE: jam will discard comments that should be written to the file
|
||||
# so instead plain '#' is used '@@#' and later is replaced with sed
|
||||
actions GenLa
|
||||
{
|
||||
today=`date`
|
||||
|
||||
cat > "$(<).tmp" <<EOF
|
||||
@@# $(<:D=) - a libtool library file
|
||||
@@# Generated by 'EDE jam build' on: $today
|
||||
|
||||
@@# The name that we can dlopen(3).
|
||||
dlname='$(DLNAME1)'
|
||||
|
||||
@@# Names of this library.
|
||||
library_names='$(DLNAME2) $(DLNAME1)'
|
||||
|
||||
@@# The name of the static archive.
|
||||
old_library=''
|
||||
|
||||
@@# Libraries that this one depends upon.
|
||||
dependency_libs=''
|
||||
|
||||
@@# Is this already installed library.
|
||||
installed=yes
|
||||
|
||||
@@# Files to dlopen/dlpreopen.
|
||||
dlopen=''
|
||||
dlpreopen=''
|
||||
|
||||
@@# Directory that this library needs to be installed in:
|
||||
libdir='$(libdir)'
|
||||
EOF
|
||||
|
||||
cat "$(<).tmp" | $(SED) 's/^@@#/#/g' > "$(<)"
|
||||
$(RM) "$(<).tmp"
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ rule MakeProgramPrivate
|
||||
objects = [ FGristFiles $(2:S=$(SUFOBJ)) ] ;
|
||||
|
||||
# Pick up values if someone set flags outside (via ObjectCcFlags and etc.)
|
||||
CFLAGS on $(objects) += $(4) ;
|
||||
CCFLAGS on $(objects) += $(4) ;
|
||||
C++FLAGS on $(objects) += $(4) ;
|
||||
|
||||
if $(REMOVE_UNUSED_DEPENDENCIES_TRICK) = 1 {
|
||||
|
@ -25,6 +25,22 @@ if ! $(INVOCATION_SUBDIR_SET) {
|
||||
}
|
||||
# Compatibility part ends
|
||||
|
||||
# [ RemoveFlag FLAG : FLAGS ] ;
|
||||
# Removes FLAG from list of FLAGS
|
||||
rule RemoveFlag
|
||||
{
|
||||
local i ;
|
||||
local ret ;
|
||||
|
||||
for i in $(>) {
|
||||
if $(i) != $(<) {
|
||||
ret += $(i) ;
|
||||
}
|
||||
}
|
||||
|
||||
return $(ret) ;
|
||||
}
|
||||
|
||||
# Fltk use .cxx extension for C++ files so it must
|
||||
# be registered. This rule is called by jam so final
|
||||
# application must not use it.
|
||||
|
80
ede-desktop-conf/BoxBlur.cpp
Normal file
80
ede-desktop-conf/BoxBlur.cpp
Normal file
@ -0,0 +1,80 @@
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* Desktop configuration tool
|
||||
* Part of Equinox Desktop Environment (EDE).
|
||||
* Copyright (c) 2009 EDE Authors.
|
||||
*
|
||||
* This program is licensed under terms of the
|
||||
* GNU General Public License version 2 or newer.
|
||||
* See COPYING for details.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <FL/Fl_RGB_Image.H>
|
||||
#include "BoxBlur.h"
|
||||
|
||||
typedef unsigned char uchar;
|
||||
typedef unsigned int uint;
|
||||
|
||||
static int pixel_address(int x, int y, int w) {
|
||||
return y * w + x;
|
||||
}
|
||||
|
||||
static uint get_pixel(uint* data, int x, int y, int w) {
|
||||
int p = pixel_address(x, y, w);
|
||||
if(p < 0)
|
||||
p = 0;
|
||||
if(p > w - 1)
|
||||
p = w - 1;
|
||||
return data[p];
|
||||
}
|
||||
|
||||
Fl_RGB_Image* box_blur(Fl_RGB_Image* src) {
|
||||
int radius = 4;
|
||||
|
||||
uint* orig = (uint*)src->data()[0];
|
||||
uchar* buf = new uchar[src->w() * src->h() * src->d()];
|
||||
memcpy(buf, src->array, src->w() * src->h() * src->d());
|
||||
uint* bufptr = (uint*)buf;
|
||||
|
||||
for(int x = 4; x < src->w() - 1; x++) {
|
||||
for(int y = 4; y < src->h() - 1; y+= src->d()) {
|
||||
int count = 0;
|
||||
uint rsum = 0, gsum = 0, bsum = 0, asum = 0;
|
||||
|
||||
for(int nx = x - radius; nx < x + radius; nx++) {
|
||||
for(int ny = y - radius; ny < y + radius; ny++) {
|
||||
/* get pixel from x,y */
|
||||
uint pix = get_pixel(bufptr, nx, ny, src->w()/src->d());
|
||||
uchar* ptr = (uchar*)&pix;
|
||||
|
||||
rsum += *ptr++;
|
||||
gsum += *ptr++;
|
||||
bsum += *ptr++;
|
||||
asum += *ptr;
|
||||
|
||||
count += 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* set pixel at x,y */
|
||||
uint tmp;
|
||||
uchar *tc = (uchar*)&tmp;
|
||||
*tc++ = rsum / count;
|
||||
*tc++ = gsum / count;
|
||||
*tc++ = bsum / count;
|
||||
*tc = asum / count;
|
||||
|
||||
bufptr[pixel_address(x, y, src->w()/src->d())] = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
if(src->alloc_array)
|
||||
delete [] (uchar*)src->array;
|
||||
src->array = buf;
|
||||
src->alloc_array = 1;
|
||||
|
||||
return src;
|
||||
}
|
20
ede-desktop-conf/BoxBlur.h
Normal file
20
ede-desktop-conf/BoxBlur.h
Normal file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* Desktop configuration tool
|
||||
* Part of Equinox Desktop Environment (EDE).
|
||||
* Copyright (c) 2009 EDE Authors.
|
||||
*
|
||||
* This program is licensed under terms of the
|
||||
* GNU General Public License version 2 or newer.
|
||||
* See COPYING for details.
|
||||
*/
|
||||
|
||||
#ifndef __BOXBLUR_H__
|
||||
#define __BOXBLUR_H__
|
||||
|
||||
class Fl_RGB_Image;
|
||||
|
||||
Fl_RGB_Image* box_blur(Fl_RGB_Image* src);
|
||||
|
||||
#endif
|
@ -10,7 +10,7 @@
|
||||
|
||||
SubDir TOP ede-desktop-conf ;
|
||||
|
||||
SOURCE = ede-desktop-conf.cpp ;
|
||||
SOURCE = ede-desktop-conf.cpp BoxBlur.cpp ;
|
||||
|
||||
EdeProgram ede-desktop-conf : $(SOURCE) ;
|
||||
TranslationStrings locale : $(SOURCE) ;
|
||||
|
@ -42,6 +42,8 @@
|
||||
#include <edelib/FontChooser.h>
|
||||
#include <edelib/Directory.h>
|
||||
|
||||
#include "BoxBlur.h"
|
||||
|
||||
#define EDE_DESKTOP_UID 0x10
|
||||
#define EDE_DESKTOP_CONFIG "ede/ede-desktop"
|
||||
|
||||
@ -128,6 +130,7 @@ void set_wallpaper(const char* path) {
|
||||
case IMG_STRETCH: {
|
||||
Fl_Image* transformed = rel_img->copy(area_w, area_h);
|
||||
wallpaper_img->size(area_w, area_h);
|
||||
transformed = (Fl_RGB_Image*)box_blur((Fl_RGB_Image*)transformed);
|
||||
wallpaper_img->image(transformed);
|
||||
break;
|
||||
}
|
||||
@ -276,7 +279,7 @@ void ok_cb(Fl_Widget*, void* w) {
|
||||
edelib::Window* win = (edelib::Window*)w;
|
||||
apply_cb(0, win);
|
||||
/* a hack so ede-desktop-conf can send a message before it was closed */
|
||||
sleep(1);
|
||||
usleep(120000);
|
||||
win->hide();
|
||||
}
|
||||
|
||||
@ -373,11 +376,13 @@ int main(int argc, char** argv) {
|
||||
g1->hide();
|
||||
|
||||
g1->begin();
|
||||
/*
|
||||
Fl_Box* b1 = new Fl_Box(85, 196, 100, 15);
|
||||
b1->box(FL_BORDER_BOX);
|
||||
|
||||
Fl_Box* b2 = new Fl_Box(30, 43, 210, 158);
|
||||
b2->box(FL_THIN_UP_BOX);
|
||||
*/
|
||||
|
||||
/* box size is intentionaly odd so preserve aspect ratio */
|
||||
wallpaper = new Fl_Box(43, 53, 184, 138);
|
||||
@ -392,8 +397,10 @@ int main(int argc, char** argv) {
|
||||
wallpaper_img->box(FL_NO_BOX);
|
||||
wallpaper_img->align(FL_ALIGN_CLIP);
|
||||
|
||||
/*
|
||||
Fl_Box* b4 = new Fl_Box(60, 206, 145, 14);
|
||||
b4->box(FL_THIN_UP_BOX);
|
||||
*/
|
||||
|
||||
desk_background = new Fl_Input(295, 80, 190, 25, _("Image:"));
|
||||
|
||||
@ -471,6 +478,6 @@ int main(int argc, char** argv) {
|
||||
|
||||
win->init(edelib::WIN_INIT_IMAGES);
|
||||
load_settings();
|
||||
win->show();
|
||||
win->show(argc, argv);
|
||||
return Fl::run();
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ rule FortuneCompile
|
||||
MakeLocate $(<) : $(SUBDIR) ;
|
||||
|
||||
FortuneCompile1 $(<) : $(>) ;
|
||||
Clean clean : $(<) ;
|
||||
LocalClean clean : $(<) ;
|
||||
}
|
||||
|
||||
actions FortuneCompile1
|
||||
|
@ -8,35 +8,17 @@
|
||||
# GNU General Public License version 2 or later.
|
||||
# See COPYING for the details.
|
||||
|
||||
|
||||
SubDir TOP emountd ;
|
||||
|
||||
rule RemoveFlag
|
||||
{
|
||||
local i ;
|
||||
local ret ;
|
||||
|
||||
for i in $(>) {
|
||||
if $(i) != $(<) {
|
||||
ret += $(i) ;
|
||||
}
|
||||
}
|
||||
|
||||
return $(ret) ;
|
||||
}
|
||||
|
||||
HALFLAGS = -DDBUS_API_SUBJECT_TO_CHANGE -I/usr/include/hal -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include ;
|
||||
HALLIBS = -lhal-storage -lhal -ldbus-1 ;
|
||||
|
||||
SOURCE = emountd.cpp ;
|
||||
|
||||
ObjectC++Flags $(SOURCE) : -Wno-long-long
|
||||
# libhal have a bug that fails on C++ with '-pedantic' flag
|
||||
[ RemoveFlag -pedantic : $(GLOBALFLAGS) ]
|
||||
$(EDELIBINCLUDE)
|
||||
$(HALFLAGS) ;
|
||||
$(HALINCLUDE) ;
|
||||
|
||||
Main emountd : $(SOURCE) ;
|
||||
LinkAgainst emountd : $(EDELIBLIB) $(HALLIBS) $(STDLIB) ;
|
||||
LinkAgainst emountd : $(EDELIBLIB) $(HALLIB) $(STDLIB) ;
|
||||
InstallEdeProgram emountd ;
|
||||
EdeManual emountd.txt ;
|
||||
|
Loading…
Reference in New Issue
Block a user