summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/Makefile
blob: 9b22774576f0479104fc684a3d344f0af3fdc4cd (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
 #******************************************************************************
 #
 #    mdk-stage1 - the program that will load second-stage install
 #
 # $Id$
 #
 # Pixel (pixel@mandrakesoft.com) (mostly done by Guillaume Cottenceau)
 #
 # Copyright 2000-2004 Mandrakesoft
 #
 # This software may be freely redistributed under the terms of the GNU
 # public license.
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

VERSION=1.30
PRODUCT=drakx-installer-binaries

 #
 # Portions from Erik Troan (ewt@redhat.com) Copyright 1996 Red Hat Software 
 #
 #*****************************************************************************
 #
 # Currently:
 #
 # 	ix86
 # init with dietlibc
 # stage1 with dietlibc
 #
 # 	ppc
 # init with dietlibc
 # stage1 with glibc
 #
 # 	ia64
 # init with glibc
 # stage1 with glibc
 #
 #	x86-64
 # init with dietlibc
 # stage1 with dietlibc
 #
 #*****************************************************************************


top_dir = .

include $(top_dir)/Makefile.common
include $(top_dir)/../Makefile.config
ARCHDIR=$(ARCH)
ifeq (i386, $(ARCH))
ARCHDIR=i586
endif

DEFS = -DDISTRIB_NAME=\"$(DISTRIB_NAME)\" -DDISTRIB_VERSION=\"$(DISTRIB_VERSION)\" -DDISTRIB_TYPE=\"$(DISTRIB_TYPE)\" -DDISTRIB_DESCR=\"$(DISTRIB_DESCR)\" $(ADDITIONAL_DEFS) -D_FILE_OFFSET_BITS=64 -DARCH=\"$(ARCHDIR)\" -DCONFIG_USE_ZLIB

COMPILE = $(CC) $(DEFS) $(CFLAGS)

INIT_DEFS =
INITSRC = init.c
ifneq (DIETLIBC, $(L))
INIT_DEFS += $(GLIBC_INCLUDES)
endif

INITOBJS = $(subst .c,.o,$(INITSRC))


 #- frontends
NEWT_FRONTEND_SRC = newt-frontend.c
NEWT_FRONTEND_LIBS = newt/libnewt.a slang/libslang.a

STDIO_FRONTEND_SRC = stdio-frontend.c
STDIO_FRONTEND_LIBS =
STDIO_FRONTEND_LIBS =


FRONTEND_OBJS = $(subst .c,.o,$($(F)_FRONTEND_SRC))

FRONTEND_LINK = $(FRONTEND_OBJS) $($(F)_FRONTEND_LIBS)

STAGE1_STATIC_LIBS = libmodprobe.a
STAGE1_STATIC_USR_LIBS = libz.a libldetect.a libpci.a
STAGE1_OWN_LIBS =
ifeq (DIETLIBC, $(L))
STAGE1_OWN_LIBS = $(patsubst %,/usr/lib/dietlibc/lib-$(ARCH)/%,$(STAGE1_STATIC_USR_LIBS) $(STAGE1_STATIC_LIBS))
else
STAGE1_OWN_LIBS = $(patsubst %,/usr/$(LIB)/%,$(STAGE1_STATIC_USR_LIBS)) $(patsubst %,/$(LIB)/%,$(STAGE1_STATIC_LIBS))
endif


ifeq (DIETLIBC, $(L))
STAGE1_NETWORK_LIBS = /usr/lib/dietlibc/lib-$(ARCH)/librpc.a
else
STAGE1_NETWORK_LIBS = /usr/$(LIB)/libresolv.a
endif

 #- stage1 itself
STAGE1SRC = stage1.c log.c utils.c params.c tools.c modules.c probing.c mount.c automatic.c frontend-common.c lomount.c thirdparty.c zlibsupport.c
CDROMSRC = cdrom.c
DISKSRC = disk.c directory.c partition.c
NETWORKSRC = network.c nfsmount.c dhcp.c url.c dns.c adsl.c directory.c wireless.c
KASRC = ka.c

# use sort to remove duplicates
STAGE1_ALLSRC = $(sort $(STAGE1SRC) $(CDROMSRC) $(DISKSRC) $(NETWORKSRC) $(KASRC))
ALLSRC = $(INITSRC) $(STAGE1_ALLSRC)



CDROM_DEFS = -DSPAWN_SHELL -DDISABLE_DISK -DDISABLE_NETWORK


STAGE1OBJS-NETWORK = $(subst .c,-NETWORK.o,$(STAGE1SRC) $(NETWORKSRC))

NETWORK_DEFS = -DSPAWN_SHELL -DDISABLE_CDROM -DDISABLE_DISK -DDISABLE_KA


STAGE1OBJS-NETWORK-STANDALONE = $(subst .c,-NETWORK-STANDALONE.o,$(STAGE1SRC) $(NETWORKSRC))

NETWORK_STANDALONE_DEFS = -DDISABLE_CDROM -DDISABLE_DISK -DENABLE_NETWORK_STANDALONE -DDISABLE_KA


STAGE1OBJS-FULL = $(subst .c,-FULL.o,$(STAGE1_ALLSRC))

BINS = init stage1 dhcp-client rescue-gui probe-modules

DIRS += pci-resource usb-resource slang newt ppp/pppd rp-pppoe/src
ifeq (i386, $(ARCH))
DIRS += pcmcia pcmcia-resource sysfs
endif
ifeq (x86_64, $(ARCH))
DIRS += pcmcia pcmcia-resource sysfs
endif


ifeq (i386,$(ARCH))
PCMCIA_LIB = pcmcia/libpcmcia.a sysfs/libsysfs.a
PCMCIA_DEFS = -DENABLE_PCMCIA
endif
ifeq (x86_64,$(ARCH))
PCMCIA_LIB = pcmcia/libpcmcia.a sysfs/libsysfs.a
PCMCIA_DEFS = -DENABLE_PCMCIA
endif


USB_DEFS_GEN = -DENABLE_USB
USB_DEFS = -DENABLE_USB -DDISABLE_PCIADAPTERS

all: dirs $(BINS)

dirs:
	@for n in . $(DIRS); do \
		[ "$$n" = "." ] || make -C $$n || exit 1 ;\
	done

init: $(INITOBJS) $(STAGE1_LIBC)
	$(DIET) $(CC) $(LDFLAGS) -o $@ $^
	$(STRIPCMD) $@

stage1: $(STAGE1OBJS-FULL) $(STAGE1_OWN_LIBS) $(STAGE1_NETWORK_LIBS) $(FRONTEND_LINK) bootsplash.o $(PCMCIA_LIB) $(STAGE1_LIBC)
	$(DIET) $(CC) $(LDFLAGS) -o $@ $^
	$(STRIPCMD) $@

dhcp-client: $(STAGE1OBJS-NETWORK-STANDALONE) $(STAGE1_OWN_LIBS) $(STAGE1_NETWORK_LIBS) $(FRONTEND_LINK) $(STAGE1_LIBC)
	$(DIET) $(CC) $(LDFLAGS) -o $@ $^
	$(STRIPCMD) $@


$(INITOBJS): %.o: %.c
	$(COMPILE) $(INIT_DEFS) -c $<

$(STAGE1OBJS-NETWORK): %-NETWORK.o: %.c
	$(DIET) $(COMPILE) $(INCLUDES) $(NETWORK_DEFS) $(PCMCIA_DEFS) $(USB_DEFS_GEN) -DENABLE_ADDITIONAL_MODULES -c $< -o $@

$(STAGE1OBJS-NETWORK-STANDALONE): %-NETWORK-STANDALONE.o: %.c
	$(DIET) $(COMPILE) $(INCLUDES) $(NETWORK_STANDALONE_DEFS) $(USB_DEFS_GEN) -c $< -o $@

$(STAGE1OBJS-FULL): %-FULL.o: %.c
	$(DIET) $(COMPILE) $(INCLUDES) -DSPAWN_SHELL $(USB_DEFS_GEN) $(PCMCIA_DEFS) -DENABLE_BOOTSPLASH -c $< -o $@

.c.o:
	$(DIET) $(COMPILE) $(INCLUDES) -DENABLE_BOOTSPLASH -c $<


clean: localclean
	@for n in $(DIRS); do \
		(cd $$n; make clean) \
	done

localclean:
	rm -f *.o .depend *.rdz *.img $(BINS)


rescue-gui: rescue-gui.o frontend-common.o params.o utils.o log.o automatic.o $(FRONTEND_LINK) $(STAGE1_LIBC)
	$(DIET) $(CC) $(LDFLAGS) -o $@ $^
	$(STRIPCMD) $@

probe-modules: probe-modules.o probing-FULL.o modules-FULL.o params-FULL.o utils-FULL.o log-FULL.o automatic-FULL.o frontend-common-FULL.o stdio-frontend.o zlibsupport-FULL.o $(STAGE1_OWN_LIBS) $(PCMCIA_LIB) $(STAGE1_LIBC)
	$(DIET) $(CC) $(LDFLAGS) -o $@ $^
	$(STRIPCMD) $@

tar:
	rm -rf $(PRODUCT)*.tar* $(PRODUCT)-$(VERSION)
	mkdir -p $(PRODUCT)-$(VERSION)
	svn export -q -rBASE . $(PRODUCT)-$(VERSION)/mdk-stage1
	svn export -q -rBASE ../kernel $(PRODUCT)-$(VERSION)/kernel
	cp ../Makefile.config $(PRODUCT)-$(VERSION)/
	tar cfj $(PRODUCT)-$(VERSION).tar.bz2 $(PRODUCT)-$(VERSION)
	rm -rf $(PRODUCT)-$(VERSION)

.depend:
	$(CPP) $(CFLAGS) -M $(ALLSRC) > .depend

ifeq (.depend,$(wildcard .depend))
include .depend
endif


*-NETWORK.o: %-NETWORK.o: %.o

*-FULL.o: %-FULL.o: %.o

hl str">[$i]]; $str = &$str[sizeof($str) - 1]; } unset($str[$blocks[$blockcount]]); } else { // Top-level block. unset($this->_tpldata[$blockname]); } } /** * Display handle * @access public * @param string $handle Handle to display * @param bool $include_once Allow multiple inclusions * @return bool True on success, false on failure */ public function display($handle, $include_once = true) { global $user, $phpbb_hook; if (!empty($phpbb_hook) && $phpbb_hook->call_hook(array(__CLASS__, __FUNCTION__), $handle, $include_once)) { if ($phpbb_hook->hook_return(array(__CLASS__, __FUNCTION__))) { return $phpbb_hook->hook_return_result(array(__CLASS__, __FUNCTION__)); } } /* if (defined('IN_ERROR_HANDLER')) { if ((E_NOTICE & error_reporting()) == E_NOTICE) { //error_reporting(error_reporting() ^ E_NOTICE); } }*/ $_tpldata = &$this->_tpldata; $_rootref = &$this->_rootref; $_lang = &$user->lang; // These _are_ used the included files. $_tpldata; $_rootref; $_lang; if (($filename = $this->_tpl_load($handle)) !== false) { ($include_once) ? include_once($filename) : include($filename); } else if (($code = $this->_tpl_eval($handle)) !== false) { $code = ' ?> ' . $code . ' <?php '; eval($code); } else { // if we could not eval AND the file exists, something horrific has occured return false; } return true; } /** * Display the handle and assign the output to a template variable or return the compiled result. * @access public * @param string $handle Handle to operate on * @param string $template_var Template variable to assign compiled handle to * @param bool $return_content If true return compiled handle, otherwise assign to $template_var * @param bool $include_once Allow multiple inclusions of the file * @return bool|string If $return_content is true return string of the compiled handle, otherwise return true */ public function assign_display($handle, $template_var = '', $return_content = true, $include_once = false) { ob_start(); $this->display($handle, $include_once); $contents = ob_get_clean(); if ($return_content) { return $contents; } $this->assign_var($template_var, $contents); return true; } /** * Load a compiled template if possible, if not, recompile it * @access private * @param string $handle Handle of the template to load * @return string|bool Return filename on success otherwise false * @uses template_compile is used to compile uncached templates */ private function _tpl_load($handle) { global $config; $filename = $this->cachepath . str_replace('/', '.', $this->filename[$handle]) . '.' . PHP_EXT; $recompile = (!file_exists($filename) || @filesize($filename) === 0 || ($config['load_tplcompile'] && @filemtime($filename) < filemtime($this->files[$handle]))) ? true : false; // Recompile page if the original template is newer, otherwise load the compiled version if ($recompile) { if (!class_exists('template_compile')) { include(PHPBB_ROOT_PATH . 'includes/functions_template.' . PHP_EXT); } $compile = new template_compile($this); // If we don't have a file assigned to this handle, die. if (!isset($this->files[$handle])) { trigger_error("template->_tpl_load(): No file specified for handle $handle", E_USER_ERROR); } if ($compile->_tpl_load_file($handle) === false) { return false; } } return $filename; } /** * This code should only run when some high level error prevents us from writing to the cache. * @access private * @param string $handle Template handle to compile * @return string|bool Return compiled code on success otherwise false * @uses template_compile is used to compile template */ private function _tpl_eval($handle) { if (!class_exists('template_compile')) { include(PHPBB_ROOT_PATH . 'includes/functions_template.' . PHP_EXT); } $compile = new template_compile($this); // If we don't have a file assigned to this handle, die. if (!isset($this->files[$handle])) { trigger_error("template->_tpl_eval(): No file specified for handle $handle", E_USER_ERROR); } if (($code = $compile->_tpl_gen_src($handle)) === false) { return false; } return $code; } /** * Assign key variable pairs from an array * @access public * @param array $vararray A hash of variable name => value pairs */ public function assign_vars(array $vararray) { foreach ($vararray as $key => $val) { $this->_rootref[$key] = $val; } } /** * Assign a single variable to a single key * @access public * @param string $varname Variable name * @param string $varval Value to assign to variable */ public function assign_var($varname, $varval) { $this->_rootref[$varname] = $varval; } /** * Assign key variable pairs from an array to a specified block * @access public * @param string $blockname Name of block to assign $vararray to * @param array $vararray A hash of variable name => value pairs */ public function assign_block_vars($blockname, array $vararray) { if (strpos($blockname, '.') !== false) { // Nested block. $blocks = explode('.', $blockname); $blockcount = sizeof($blocks) - 1; $str = &$this->_tpldata; for ($i = 0; $i < $blockcount; $i++) { $str = &$str[$blocks[$i]]; $str = &$str[sizeof($str) - 1]; } // Now we add the block that we're actually assigning to. // We're adding a new iteration to this block with the given // variable assignments. $str[$blocks[$blockcount]][] = $vararray; } else { // Top-level block. // Add a new iteration to this block with the variable assignments we were given. $this->_tpldata[$blockname][] = $vararray; } } /** * Change already assigned key variable pair (one-dimensional - single loop entry) * * An example of how to use this function: * * @param string $blockname the blockname, for example 'loop' * @param array $vararray the var array to insert/add or merge * @param mixed $key Key to search for * * array: KEY => VALUE [the key/value pair to search for within the loop to determine the correct position] * * int: Position [the position to change or insert at directly given] * * If key is false the position is set to 0 * If key is true the position is set to the last entry * * @param string $mode Mode to execute (valid modes are 'insert' and 'change') * * If insert, the vararray is inserted at the given position (position counting from zero). * If change, the current block gets merged with the vararray (resulting in new key/value pairs be added and existing keys be replaced by the new value). * * Since counting begins by zero, inserting at the last position will result in this array: array(vararray, last positioned array) * and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars) * * @return bool false on error, true on success * @access public */ public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert') { if (strpos($blockname, '.') !== false) { // Nested block. $blocks = explode('.', $blockname); $blockcount = sizeof($blocks) - 1; $block = &$this->_tpldata; for ($i = 0; $i < $blockcount; $i++) { if (($pos = strpos($blocks[$i], '[')) !== false) { $name = substr($blocks[$i], 0, $pos); if (strpos($blocks[$i], '[]') === $pos) { $index = sizeof($block[$name]) - 1; } else { $index = min((int) substr($blocks[$i], $pos + 1, -1), sizeof($block[$name]) - 1); } } else { $name = $blocks[$i]; $index = sizeof($block[$name]) - 1; } $block = &$block[$name]; $block = &$block[$index]; } $block = &$block[$blocks[$i]]; // Traverse the last block } else { // Top-level block. $block = &$this->_tpldata[$blockname]; } // Change key to zero (change first position) if false and to last position if true if ($key === false || $key === true) { $key = ($key === false) ? 0 : sizeof($block); } // Get correct position if array given if (is_array($key)) { // Search array to get correct position list($search_key, $search_value) = @each($key); $key = NULL; foreach ($block as $i => $val_ary) { if ($val_ary[$search_key] === $search_value) { $key = $i; break; } } // key/value pair not found if ($key === NULL) { return false; } } // Insert Block if ($mode == 'insert') { // Re-position template blocks for ($i = sizeof($block); $i > $key; $i--) { $block[$i] = $block[$i-1]; } // Insert vararray at given position $block[$key] = $vararray; return true; } // Which block to change? if ($mode == 'change') { if ($key == sizeof($block)) { $key--; } $block[$key] = array_merge($block[$key], $vararray); return true; } return false; } /** * Include a separate template * @access private * @param string $filename Template filename to include * @param bool $include True to include the file, false to just load it * @uses template_compile is used to compile uncached templates */ private function _tpl_include($filename, $include = true) { $handle = $filename; $this->filename[$handle] = $filename; $this->files[$handle] = $this->root . '/' . $filename; $filename = $this->_tpl_load($handle); if ($include) { global $user; $_tpldata = &$this->_tpldata; $_rootref = &$this->_rootref; $_lang = &$user->lang; // These _are_ used the included files. $_tpldata; $_rootref; $_lang; if ($filename) { include($filename); return; } else { if (!class_exists('template_compile')) { include(PHPBB_ROOT_PATH . 'includes/functions_template.' . PHP_EXT); } $compile = new template_compile($this); if (($code = $compile->_tpl_gen_src($handle)) !== false) { $code = ' ?> ' . $code . ' <?php '; eval($code); } } } } } ?>