summaryrefslogtreecommitdiffstats
path: root/Jamrules
blob: 9fdd02fd6533c8026668131c99c8b2a4f1fd8af6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# Compilers & flags
CC       = gcc ;
C++      = g++ ;
CCFLAGS  = $(CFLAGS) ;
C++FLAGS = $(CFLAGS) ;
AS       = nasm -f elf ;
LINK     = g++ ;
OPTIM    = -O3 -funroll-loops ;

# HandBrake defines
HB_VERSION = 0.6.0-test1 ;
DEFINES    = HB_$(OS) HB_VERSION=\\\"$(HB_VERSION)\\\" ;
#DEFINES   += HB_NOMMX ;

# OS-specific
if $(OS) = BEOS
{
    CCFLAGS  += -Wno-multichar ;
    C++FLAGS += -Wno-multichar ;
}
else if $(OS) = LINUX
{
    LINKLIBS = -lpthread ;
}
else if $(OS) = MACOSX
{
    RM = rm -rf ;
}

# Contrib* rules: mostly the same than Jambase rules, except
#  * Targets aren't cleaned by jam clean (to prevent from deleting
#    every contrib library by accident)
#  * ContribObject handles *.asm files
#  * Temporary *.o files aren't removed
rule ContribObject
{
    MakeLocate $(<) : $(LOCATE_TARGET) ;
    SEARCH on $(>) = $(SEARCH_SOURCE) ;
    HDRS on $(<) = $(SEARCH_SOURCE) $(SUBDIRHDRS) $(HDRS) ;
    HDRRULE on $(>) = HdrRule ;
    HDRSCAN on $(>) = $(HDRPATTERN) ;
    HDRSEARCH on $(>) =
            $(SEARCH_SOURCE:E) $(SUBDIRHDRS) $(HDRS) $(STDHDRS) ;
    HDRGRIST on $(>) = $(HDRGRIST) ;
    DEFINES on $(<) += $(DEFINES) ;
    switch $(>:S)
    {   
        case .asm : As $(<) : $(>) ;
        case .nas : As $(<) : $(>) ;
        case .c :   Cc $(<) : $(>) ;
        case .C :   C++ $(<) : $(>) ;
        case .cc :  C++ $(<) : $(>) ;
        case .cpp : C++ $(<) : $(>) ;
        case .f :   Fortran $(<) : $(>) ;
        case .l :   Cc $(<) : $(<:S=.c) ;
                    Lex $(<:S=.c) : $(>) ;
        case .s :   As $(<) : $(>) ;
        case .y :   Cc $(<) : $(<:S=$(YACCGEN)) ; 
                    Yacc $(<:S=$(YACCGEN)) : $(>) ;
        case * :    UserObject $(<) : $(>) ;
    }
}
rule ContribObjects
{
    local _i ;
    for _i in [ FGristFiles $(<) ]
    {
        ContribObject $(_i:S=$(SUFOBJ)) : $(_i) ;
        Depends obj : $(_i:S=$(SUFOBJ)) ;
    }
}
rule ContribLibrary
{
    local _l _s ;
    _s = [ FGristFiles $(>:S=$(SUFOBJ)) ] ;
    _l = $(<:S=$(SUFLIB)) ;
    ContribObjects $(>) ;
    Depends obj : $(_s) ;
    MakeLocate $(_l) $(_l)($(_s:BS)) : $(LOCATE_TARGET) ;
    Depends $(_l) : $(_s) ;
    Archive $(_l) : $(_s) ;
    if $(RANLIB) { Ranlib $(_l) ; }
    Depends lib : $(_l) ;
}

# Custom Library rule: same as ContribLibrary, except 'jam clean'
# removes built objects
rule Library
{
    ContribLibrary $(<) : $(>) ;
    Clean clean : [ FGristFiles $(>:S=$(SUFOBJ)) ] ;
    Clean clean : $(<:S=$(SUFLIB)) ;
}

# Build HandBrake.app using Xcode
rule OSXApp
{   
    Clean clean : $(1) macosx/build ;
    BuildOSXApp $(1) ;
}
actions BuildOSXApp
{
    $(RM) $(1) ;
    ( cd macosx && xcodebuild ) && \
      cp -r macosx/build/HandBrake.app $(1) && \
      for i in French German; do \
        ( cd $(1)/Contents/Resources && \
          cp -r English.lproj $i.lproj && \
          cp ../../../macosx/i18n/$i.strings \
            $i.lproj/Localizable.strings ) \
      done ;
}
rule OSXPackage 
{   
    BuildOSXPackage $(1) ;
}   
actions BuildOSXPackage
{                 
    rm -rf $(1) "HandBrake $(HB_VERSION)" && \
      mkdir "HandBrake $(HB_VERSION)" && \
      cp -r AUTHORS COPYING CREDITS HandBrake.app \
        "HandBrake $(HB_VERSION)" && \
      zip -9 -r $(1) "HandBrake $(HB_VERSION)" && \
      rm -rf "HandBrake $(HB_VERSION)"
}