summaryrefslogtreecommitdiffstats
path: root/Jamrules
blob: 0eb0cac77da78e7261f1306ca1a07fc6fc024848 (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
127
128
129
130
131
132
# 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-test3 ;
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
{
    # To clean HandBrake.app
    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 it pl ru nl; 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 AUTHORS "HandBrake $(HB_VERSION)/AUTHORS.txt" && \
      cp COPYING "HandBrake $(HB_VERSION)/COPYING.txt" && \
      cp CREDITS "HandBrake $(HB_VERSION)/CREDITS.txt" && \
      cp THANKS "HandBrake $(HB_VERSION)/THANKS.txt" && \
      ( cd doc && ./genhtml.sh ) && \
      cp doc/faq.html "HandBrake $(HB_VERSION)/FAQ.html" && \
      cp -r HandBrake.app "HandBrake $(HB_VERSION)" && \
      zip -9 -r $(1) "HandBrake $(HB_VERSION)" && \
      rm -rf "HandBrake $(HB_VERSION)"
}