LIBC := libc-8.2.0 # # Interface to top-level prepare Makefile # PORTS += $(LIBC) # # Check for tools # $(call check_tool,svn) $(call check_tool,lex) $(call check_tool,bison) $(call check_tool,rpcgen) # # Subdirectories to check out from FreeBSD's Subversion repository # LIBC_SVN_BASE = http://svn.freebsd.org/base/release/8.2.0 LIBC_CONTRIB_SUB_DIRS = libc libutil include sys_sys sys_netinet sys_netinet6 \ sys_net sys_bsm sys_rpc sys_vm sys_arm sys_i386 sys_amd64 \ msun gdtoa LIBC_SVN_libc = lib/libc LIBC_SVN_libutil = lib/libutil LIBC_SVN_include = include LIBC_SVN_sys_sys = sys/sys LIBC_SVN_sys_rpc = sys/rpc LIBC_SVN_sys_net = sys/net LIBC_SVN_sys_netinet = sys/netinet LIBC_SVN_sys_netinet6 = sys/netinet6 LIBC_SVN_sys_bsm = sys/bsm LIBC_SVN_sys_vm = sys/vm LIBC_SVN_sys_arm = sys/arm/include LIBC_SVN_sys_i386 = sys/i386/include LIBC_SVN_sys_amd64 = sys/amd64/include LIBC_SVN_msun = lib/msun LIBC_SVN_gdtoa = contrib/gdtoa LIBC_DIRS_TO_CHECKOUT = $(addprefix $(CONTRIB_DIR)/$(LIBC)/,$(LIBC_CONTRIB_SUB_DIRS)) $(LIBC_DIRS_TO_CHECKOUT): $(ECHO) "checking out '$(LIBC_SVN_$(notdir $@))' to '$@'" $(VERBOSE)mkdir -p $(CONTRIB_DIR)/$(LIBC) $(VERBOSE)svn export $(LIBC_SVN_BASE)/$(LIBC_SVN_$(notdir $@)) $@ checkout-libc: $(LIBC_DIRS_TO_CHECKOUT) # # Files coming from the include directory # LIBC_IMPORT_INCLUDES = include/libc/strings.h \ include/libc/limits.h \ include/libc/string.h \ include/libc/ctype.h \ include/libc/_ctype.h \ include/libc/runetype.h \ include/libc/stdlib.h \ include/libc/stdio.h \ include/libc/signal.h \ include/libc/unistd.h \ include/libc/wchar.h \ include/libc/time.h \ include/libc/sysexits.h \ include/libc/arpa/inet.h \ include/libc/arpa/ftp.h \ include/libc/arpa/nameser.h \ include/libc/arpa/nameser_compat.h \ include/libc/arpa/telnet.h \ include/libc/arpa/tftp.h \ include/libc/resolv.h \ include/libc/wctype.h \ include/libc/fcntl.h \ include/libc/locale.h \ include/libc/langinfo.h \ include/libc/regex.h \ include/libc/paths.h \ include/libc/inttypes.h \ include/libc/fstab.h \ include/libc/netdb.h \ include/libc/ar.h \ include/libc/stdint.h \ include/libc/ieeefp.h \ include/libc/memory.h \ include/libc/res_update.h \ include/libc/rpc/rpc.h \ include/libc/netconfig.h \ include/libc/rpc/xdr.h \ include/libc/rpc/auth.h \ include/libc/rpc/clnt_stat.h \ include/libc/rpc/clnt.h \ include/libc/rpc/clnt_soc.h \ include/libc/rpc/rpc_msg.h \ include/libc/rpc/auth_unix.h \ include/libc/rpc/auth_des.h \ include/libc/rpc/svc.h \ include/libc/rpc/svc_soc.h \ include/libc/rpc/svc_auth.h \ include/libc/rpc/pmap_clnt.h \ include/libc/rpc/pmap_prot.h \ include/libc/rpc/rpcb_clnt.h \ include/libc/rpc/rpcb_prot.h \ include/libc/rpc/rpcent.h \ include/libc/rpcsvc/yp_prot.h \ include/libc/rpcsvc/ypclnt.h \ include/libc/rpc/des_crypt.h \ include/libc/rpc/des.h \ include/libc/rpcsvc/nis.h \ include/libc/rpcsvc/nis_tags.h \ include/libc/rpcsvc/nislib.h \ include/libc/rpc/rpc_com.h \ include/libc/ifaddrs.h \ include/libc/rpc/nettype.h \ include/libc/rpc/rpcsec_gss.h \ include/libc/gssapi/gssapi.h \ include/libc/rpc/raw.h \ include/libc/rpcsvc/crypt.h # # Files from include directory needed for stdlib # # We have to make sure to shadow all gcc headers to avoid conflicts. # LIBC_IMPORT_INCLUDES += include/libc/pthread.h \ include/libc/sched.h \ include/libc/err.h \ include/libc/getopt.h \ include/libc/search.h \ include/libc/ktrace.h \ include/libc/varargs.h \ include/libc/stddef.h \ include/libc/stdbool.h \ include/libc/assert.h \ include/libc/monetary.h \ include/libc/printf.h \ include/libc/math.h # # Files from include directory needed for gen lib # LIBC_IMPORT_INCLUDES += include/libc/vis.h \ include/libc/libgen.h \ include/libc/dirent.h \ include/libc/dlfcn.h \ include/libc/link.h \ include/libc/fmtmsg.h \ include/libc/fnmatch.h \ include/libc/fts.h \ include/libc/ftw.h \ include/libc/db.h \ include/libc/grp.h \ include/libc/nsswitch.h \ include/libc/pthread_np.h \ include/libc/syslog.h \ include/libc/pwd.h \ include/libc/utmp.h \ include/libc/ttyent.h \ include/libc/stringlist.h \ include/libc/glob.h \ include/libc/termios.h \ include/libc/a.out.h \ include/libc/elf-hints.h \ include/libc/nlist.h \ include/libc/spawn.h \ include/libc/readpassphrase.h \ include/libc/semaphore.h \ include/libc/_semaphore.h \ include/libc/setjmp.h \ include/libc/elf.h \ include/libc/ulimit.h \ include/libc/utime.h \ include/libc/wordexp.h # # Files from sys/vm needed for gen lib # LIBC_IMPORT_INCLUDES += include/libc/vm/vm_param.h \ include/libc/vm/vm.h \ include/libc/vm/pmap.h # # Files coming from the sys/net directories # LIBC_IMPORT_INCLUDES += include/libc/net/if.h \ include/libc/net/if_dl.h \ include/libc/net/if_types.h # # Files coming from the sys/netinet and sys/netinet6 directories # LIBC_IMPORT_INCLUDES += include/libc/netinet/in.h \ include/libc/netinet/in_systm.h \ include/libc/netinet6/in6.h \ include/libc/netinet/ip.h \ include/libc/netinet/tcp.h # # Files coming from the sys/rpc directory # LIBC_IMPORT_INCLUDES += include/libc/sys/rpc/types.h # # Files coming from the sys/sys directory # LIBC_IMPORT_INCLUDES += include/libc/sys/_types.h \ include/libc/sys/limits.h \ include/libc/sys/cdefs.h \ include/libc/sys/_null.h \ include/libc/sys/types.h \ include/libc/sys/_pthreadtypes.h \ include/libc/sys/syslimits.h \ include/libc/sys/select.h \ include/libc/sys/_sigset.h \ include/libc/sys/_timeval.h \ include/libc/sys/timespec.h \ include/libc/sys/_timespec.h \ include/libc/sys/stat.h \ include/libc/sys/signal.h \ include/libc/sys/unistd.h \ include/libc/sys/time.h \ include/libc/sys/param.h \ include/libc/sys/stdint.h \ include/libc/sys/event.h \ include/libc/errno.h \ include/libc/sys/errno.h \ include/libc/sys/poll.h # # Files from sys/sys needed for stdlib and stdio and gen lib # LIBC_IMPORT_INCLUDES += include/libc/sys/queue.h \ include/libc/sys/mman.h \ include/libc/sys/stddef.h \ include/libc/sys/sysctl.h \ include/libc/sys/uio.h \ include/libc/sys/_iovec.h \ include/libc/sys/ktrace.h \ include/libc/sys/ioctl.h \ include/libc/sys/ttycom.h \ include/libc/sys/ioccom.h \ include/libc/sys/filio.h \ include/libc/sys/sockio.h \ include/libc/sys/wait.h \ include/libc/sys/file.h \ include/libc/sys/fcntl.h \ include/libc/sys/resource.h \ include/libc/sys/disklabel.h \ include/libc/sys/link_elf.h \ include/libc/sys/endian.h \ include/libc/sys/mount.h \ include/libc/sys/ucred.h \ include/libc/sys/dirent.h \ include/libc/sys/cpuset.h \ include/libc/sys/socket.h \ include/libc/sys/un.h \ include/libc/sys/ttydefaults.h \ include/libc/sys/imgact_aout.h \ include/libc/sys/elf32.h \ include/libc/sys/elf64.h \ include/libc/sys/elf_generic.h \ include/libc/sys/elf_common.h \ include/libc/sys/nlist_aout.h \ include/libc/sys/ipc.h \ include/libc/sys/sem.h \ include/libc/sys/exec.h \ include/libc/sys/_lock.h \ include/libc/sys/_mutex.h \ include/libc/sys/statvfs.h \ include/libc/sys/ucontext.h \ include/libc/sys/syslog.h \ include/libc/sys/times.h \ include/libc/sys/utsname.h \ include/libc/sys/elf.h \ include/libc/sys/mtio.h # # Files coming from the sys/arm/include directory # LIBC_IMPORT_INCLUDES += include/libc-arm/machine/_types.h \ include/libc-arm/machine/endian.h \ include/libc-arm/machine/_limits.h \ include/libc-arm/machine/signal.h \ include/libc-arm/machine/trap.h \ include/libc-arm/machine/_stdint.h \ include/libc-arm/machine/pte.h \ include/libc-arm/machine/cpuconf.h \ include/libc-arm/machine/sysarch.h \ include/libc-arm/machine/armreg.h \ include/libc-arm/machine/ieee.h \ include/libc-arm/machine/frame.h \ include/libc-arm/machine/sigframe.h \ include/libc-arm/machine/vm.h \ include/libc-arm/stdarg.h \ include/libc-arm/float.h # # Files coming from the sys/i386/include directory # LIBC_IMPORT_INCLUDES += include/libc-i386/machine/_types.h \ include/libc-i386/machine/endian.h \ include/libc-i386/machine/_limits.h \ include/libc-i386/machine/signal.h \ include/libc-i386/machine/trap.h \ include/libc-i386/machine/_inttypes.h \ include/libc-i386/machine/_stdint.h \ include/libc-i386/machine/param.h \ include/libc-i386/machine/vm.h \ include/libc-i386/machine/specialreg.h \ include/libc-i386/stdarg.h \ include/libc-i386/float.h # # Files coming from the sys/amd64/include directory # LIBC_IMPORT_INCLUDES += include/libc-amd64/machine/_types.h \ include/libc-amd64/machine/endian.h \ include/libc-amd64/machine/_limits.h \ include/libc-amd64/machine/signal.h \ include/libc-amd64/machine/trap.h \ include/libc-amd64/machine/_inttypes.h \ include/libc-amd64/machine/_stdint.h \ include/libc-amd64/machine/param.h \ include/libc-amd64/machine/vm.h \ include/libc-amd64/machine/specialreg.h \ include/libc-amd64/stdarg.h \ include/libc-amd64/float.h # # Files from sys/arm/include needed for stdlib and stdio # LIBC_IMPORT_INCLUDES += include/libc-arm/machine/cpufunc.h \ include/libc-arm/machine/vmparam.h \ include/libc-arm/machine/atomic.h \ include/libc-arm/arith.h \ include/libc-arm/_fpmath.h \ # # Files from sys/i386/include needed for stdlib and stdio # LIBC_IMPORT_INCLUDES += include/libc-i386/machine/cpufunc.h \ include/libc-i386/machine/vmparam.h \ include/libc-i386/machine/atomic.h \ include/libc-i386/arith.h \ include/libc-i386/_fpmath.h \ # # Files from sys/amd64/include needed for stdlib and stdio # LIBC_IMPORT_INCLUDES += include/libc-amd64/machine/cpufunc.h \ include/libc-amd64/machine/vmparam.h \ include/libc-amd64/machine/atomic.h \ include/libc-amd64/arith.h \ include/libc-amd64/_fpmath.h \ # # Files from sys/arm/include needed for gen lib # LIBC_IMPORT_INCLUDES += include/libc-arm/machine/elf.h \ include/libc-arm/machine/exec.h \ include/libc-arm/machine/reloc.h \ include/libc-arm/machine/pmap.h \ include/libc-arm/machine/ucontext.h \ include/libc-arm/machine/setjmp.h \ include/libc-arm/machine/asm.h \ include/libc-arm/machine/param.h \ include/libc-arm/machine/_inttypes.h \ include/libc-arm/machine/ieeefp.h \ include/libc-arm/SYS.h # # Files from sys/i386/include needed for gen lib # LIBC_IMPORT_INCLUDES += include/libc-i386/machine/elf.h \ include/libc-i386/machine/exec.h \ include/libc-i386/machine/reloc.h \ include/libc-i386/machine/pmap.h \ include/libc-i386/machine/ucontext.h \ include/libc-i386/machine/setjmp.h \ include/libc-i386/machine/asm.h \ include/libc-i386/machine/ieeefp.h \ include/libc-i386/SYS.h # # Files from sys/amd64/include needed for gen lib # LIBC_IMPORT_INCLUDES += include/libc-amd64/machine/elf.h \ include/libc-amd64/machine/exec.h \ include/libc-amd64/machine/reloc.h \ include/libc-amd64/machine/pmap.h \ include/libc-amd64/machine/ucontext.h \ include/libc-amd64/machine/setjmp.h \ include/libc-amd64/machine/asm.h \ include/libc-amd64/machine/ieeefp.h \ include/libc-amd64/SYS.h # # Files needed for math lib # LIBC_IMPORT_INCLUDES += include/libc/complex.h # # Files from libc/arm needed for gdtoa lib # LIBC_IMPORT_INCLUDES += include/libc-arm/gd_qnan.h # # Files from libc/i386 needed for gdtoa lib # LIBC_IMPORT_INCLUDES += include/libc-i386/gd_qnan.h # # Files from libc/amd64 needed for gdtoa lib # LIBC_IMPORT_INCLUDES += include/libc-amd64/gd_qnan.h # # Files from msun/arm needed for gdtoa lib # LIBC_IMPORT_INCLUDES += include/libc-arm/fenv.h # # Files from msun/i387 needed for gdtoa lib # LIBC_IMPORT_INCLUDES += include/libc-i386/fenv.h # # Files from msun/amd64 needed for gdtoa lib # LIBC_IMPORT_INCLUDES += include/libc-amd64/fenv.h # # Files from sys/bsm for gen lib # LIBC_IMPORT_INCLUDES += include/libc/bsm/audit.h # # Generate files needed for compiling libc-net # libc_gen_nslexer: $(CONTRIB_DIR)/$(LIBC)/libc/net/nslexer.l $(VERBOSE)$(LEX) -P_nsyy -t $< | \ sed -e '/YY_BUF_SIZE/s/16384/1024/' \ > $(CONTRIB_DIR)/$(LIBC)/libc/net/nslexer.c libc_gen_nsparser: $(CONTRIB_DIR)/$(LIBC)/libc/net/nsparser.y $(VERBOSE)bison -d -p_nsyy $< \ --defines=$(CONTRIB_DIR)/$(LIBC)/libc/net/nsparser.h \ --output=$(CONTRIB_DIR)/$(LIBC)/libc/net/nsparser.c libc_net_generate: libc_gen_nslexer libc_gen_nsparser # # Generate files needed for compiling libc-rpc # RPCB_FILES = rpcb_prot.x SRC_RPCB_FILES = $(addprefix $(CONTRIB_DIR)/$(LIBC)/include/rpc/,$(RPCB_FILES)) GEN_RPCB_FILES = $(SRC_RPCB_FILES:.x=.h) # # Unfortunatly include/rpcsvc contains a lot of .x files and to resolve their # dependencies would by cumbersome. So we include all of them instead of only # the ones we currently need. # RPCSVC_FILES = bootparam_prot.x nfs_prot.x nlm_prot.x rstat.x ypupdate_prot.x \ crypt.x nis_cache.x pmap_prot.x rwall.x yp.x \ key_prot.x nis_callback.x rex.x sm_inter.x ypxfrd.x \ klm_prot.x nis_object.x rnusers.x spray.x \ mount.x nis.x rquota.x yppasswd.x SRC_RPCSVC_FILES = $(addprefix $(CONTRIB_DIR)/$(LIBC)/include/rpcsvc/,$(RPCSVC_FILES)) GEN_RPCSVC_FILES = $(SRC_RPCSVC_FILES:.x=.h) # nis_object.h is needed by nis.h so we have to generate this header first $(CONTRIB_DIR)/$(LIBC)/include/rpcsvc/nis.h: $(CONTRIB_DIR)/$(LIBC)/include/rpcsvc/nis_object.x libc_rpc_generate: $(VERBOSE)for header in $(GEN_RPCB_FILES); do\ if [ ! -e "$$header" ]; then \ rpcgen -C -h -DWANT_NFS3 $${header%.h}.x -o $$header; \ fi; done $(VERBOSE)for header in $(GEN_RPCSVC_FILES); do\ if [ ! -e "$$header" ]; then \ rpcgen -C -h -DWANT_NFS3 $${header%.h}.x -o $$header; \ fi; done ## # Shortcut for creating a symlink # # \param $(1) prefix prepended to symlink origin, used for creating relative # symlinks # libc_gen_symlink_subsub = $(VERBOSE)mkdir -p $(dir $@); ln -sf ../../$< $@ libc_gen_symlink_subsubsub = $(VERBOSE)mkdir -p $(dir $@); ln -sf ../../../$< $@ libc_gen_symlink_subsubsubsub = $(VERBOSE)mkdir -p $(dir $@); ln -sf ../../../../$< $@ include/libc/arpa/%.h: $(CONTRIB_DIR)/$(LIBC)/include/arpa/%.h $(libc_gen_symlink_subsubsub) include/libc/gssapi/%.h: $(CONTRIB_DIR)/$(LIBC)/include/gssapi/%.h $(libc_gen_symlink_subsubsub) include/libc/net/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_net/%.h $(libc_gen_symlink_subsubsub) include/libc/netinet/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_netinet/%.h $(libc_gen_symlink_subsubsub) include/libc/netinet6/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_netinet6/%.h $(libc_gen_symlink_subsubsub) include/libc/rpc/%.h: $(CONTRIB_DIR)/$(LIBC)/include/rpc/%.h $(libc_gen_symlink_subsubsub) include/libc/rpcsvc/%.h: $(CONTRIB_DIR)/$(LIBC)/include/rpcsvc/%.h $(libc_gen_symlink_subsubsub) include/libc/%.h: $(CONTRIB_DIR)/$(LIBC)/include/%.h $(libc_gen_symlink_subsub) include/libc/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_sys/%.h $(libc_gen_symlink_subsub) include/libc/%.h: $(CONTRIB_DIR)/$(LIBC)/msun/src/%.h $(libc_gen_symlink_subsub) include/libc-arm/%.h: $(CONTRIB_DIR)/$(LIBC)/msun/arm/%.h $(libc_gen_symlink_subsub) include/libc-i386/%.h: $(CONTRIB_DIR)/$(LIBC)/msun/i387/%.h $(libc_gen_symlink_subsub) include/libc-amd64/%.h: $(CONTRIB_DIR)/$(LIBC)/msun/amd64/%.h $(libc_gen_symlink_subsub) include/libc/sys/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_sys/%.h $(libc_gen_symlink_subsubsub) include/libc/sys/rpc/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_rpc/%.h $(libc_gen_symlink_subsubsubsub) include/libc-arm/machine/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_arm/%.h $(libc_gen_symlink_subsubsub) include/libc-i386/machine/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_i386/%.h $(libc_gen_symlink_subsubsub) include/libc-amd64/machine/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_amd64/%.h $(libc_gen_symlink_subsubsub) include/libc-arm/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_arm/%.h $(libc_gen_symlink_subsub) include/libc-i386/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_i386/%.h $(libc_gen_symlink_subsub) include/libc-amd64/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_amd64/%.h $(libc_gen_symlink_subsub) include/libc-arm/%.h: $(CONTRIB_DIR)/$(LIBC)/libc/arm/%.h $(libc_gen_symlink_subsub) include/libc-i386/%.h: $(CONTRIB_DIR)/$(LIBC)/libc/i386/%.h $(libc_gen_symlink_subsub) include/libc-amd64/%.h: $(CONTRIB_DIR)/$(LIBC)/libc/amd64/%.h $(libc_gen_symlink_subsub) include/libc/bsm/audit.h: $(CONTRIB_DIR)/$(LIBC)/sys_bsm/audit.h $(libc_gen_symlink_subsubsub) include/libc/vm/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_vm/%.h $(libc_gen_symlink_subsubsub) apply_patches-libc: checkout-libc $(VERBOSE)find ./src/lib/libc/patches/ -name "*.patch" |\ xargs -ixxx sh -c "patch -p0 -r - -N -d $(CONTRIB_DIR)/$(LIBC) < xxx" || true # # Use new make instance for symlink creation. Otherwise the implicit rules # above do not work as expected (because the dependent names do not exist # at the invokation time of the original make instance and are created # as side effect of the 'LIBC_DIRS_TO_CHECKOUT' out rule). # create_include_symlinks-libc: checkout-libc $(VERBOSE)make $(LIBC_IMPORT_INCLUDES) VERBOSE=$(VERBOSE) prepare-libc: apply_patches-libc libc_net_generate libc_rpc_generate create_include_symlinks-libc clean_include_symlinks-libc: $(VERBOSE)-find include/libc{,-amd64,-arm,-i386} -type l -delete 2>/dev/null clean_include_subdirs-libc: clean_include_symlinks-libc $(VERBOSE)-find include/libc{,-amd64,-arm,-i386} -type d -empty -delete 2>/dev/null clean-libc: clean_include_subdirs-libc $(VERBOSE)rm -rf $(CONTRIB_DIR)/$(LIBC)