1## 2# Makefile for ruby 3## 4 5FW_DIR = $(NSFRAMEWORKDIR)/Ruby.framework 6FW_VERSION_DIR = $(FW_DIR)/Versions/$(VERSION) 7LOCAL_FW_RES_DIR = $(EXTRAS_DIR)/framework_resources 8SITEDIR = /Library/Ruby/Site 9USRGEMDIR = /Library/Ruby/Gems/$(VERSION3) 10 11Project = ruby 12UserType = Developer 13ToolType = Commands 14GnuAfterInstall = post-install install-plist install-irbrc install-rails-placeholder 15GnuNoBuild = YES 16 17# ruby_atomic.h 18Extra_CC_Flags = -DHAVE_GCC_SYNC_BUILTINS 19# don't expand CC -- keep it like this for rbconfig.rb 20Extra_Configure_Environment = CC="xcrun clang" CXX="xcrun clang++" 21comma := , 22space := 23space += 24Extra_Configure_Flags = \ 25 --prefix=$(FW_VERSION_DIR)$(USRDIR) \ 26 --sysconfdir=$(SITEDIR) \ 27 --with-sitedir=$(SITEDIR) \ 28 --enable-shared \ 29 --with-arch=$(subst $(space),$(comma),$(RC_ARCHS)) \ 30 ac_cv_func_getcontext=no \ 31 ac_cv_func_setcontext=no \ 32 ac_cv_c_compiler_gnu=no \ 33 ac_cv_header_net_if_h=yes \ 34 av_cv_header_ifaddrs_h=yes \ 35 rb_cv_pri_prefix_long_long=ll 36 37# It's a GNU Source project 38include $(MAKEFILEPATH)/CoreOS/ReleaseControl/GNUSource.make 39 40Install_Target = install install-doc 41Install_Flags = DESTDIR=$(DSTROOT) 42 43EXTRAS_DIR = $(SRCROOT)/extras 44 45# Automatic Extract & Patch 46AEP_Project = $(Project) 47AEP_Version = 2.0.0-p481 48AEP_ProjVers = $(AEP_Project)-$(AEP_Version) 49AEP_Filename = $(AEP_ProjVers).tar.bz2 50AEP_ExtractDir = $(AEP_ProjVers) 51AEP_Patches = ext_digest_md5_commoncrypto.diff \ 52 ext_digest_sha1_commoncrypto.diff \ 53 ext_openssl_extconf.rb.diff \ 54 configure.diff \ 55 tool_config.guess.diff \ 56 tool_mkconfig.rb.diff \ 57 ext_etc_etc.c.diff \ 58 common.mk.diff \ 59 message_tracing_main.c.diff 60 61MAJOR = $(shell echo $(AEP_Version) | cut -d. -f1) 62MINOR = $(shell echo $(AEP_Version) | cut -d. -f2) 63TEENY = $(shell echo $(AEP_Version) | $(SED) -e 's:-p.*::' | cut -d. -f3) 64VERSION = $(MAJOR).$(MINOR) 65VERSION3 = $(MAJOR).$(MINOR).$(TEENY) 66 67ConfigStamp2 = $(ConfigStamp)2 68 69configure:: $(ConfigStamp2) 70 71$(ConfigStamp2): $(ConfigStamp) 72 cat $(SRCROOT)/patches/Makefile.append >> ${BuildDirectory}/Makefile 73 @set -x && \ 74 cd ${BuildDirectory} && \ 75 arch_hdrdir=`$(MAKE) print_arch_hdrdir` && \ 76 ed - $$arch_hdrdir/ruby/config.h < $(SRCROOT)/patches/config.h.ed 77 $(_v) $(TOUCH) $(ConfigStamp2) 78 79build:: configure 80 $(INSTALL_DIRECTORY) $(SYMROOT) 81 $(_v) $(MAKE) -C $(BuildDirectory) V=1 CC=$(shell xcrun -f clang) OBJCOPY=": noobjcopy" XLDFLAGS='' RUBY_CODESIGN="-" 82 83post-install: 84 $(INSTALL_DIRECTORY) $(DSTROOT)$(FW_VERSION_DIR)/Resources 85 $(LN) -vfsh Versions/Current/Resources $(DSTROOT)/$(FW_DIR)/Resources 86 $(INSTALL_FILE) $(LOCAL_FW_RES_DIR)/Info.plist $(DSTROOT)/$(FW_VERSION_DIR)/Resources 87 $(INSTALL_FILE) $(LOCAL_FW_RES_DIR)/version.plist $(DSTROOT)/$(FW_VERSION_DIR)/Resources 88 $(SED) -e "s:_CFBundleShortVersionString_:$(MACOSX_DEPLOYMENT_TARGET):" \ 89 -e "s:_CFBundleVersion_:$(AEP_Version)-$(RC_ProjectSourceVersion):" \ 90 $(LOCAL_FW_RES_DIR)/Info.plist > $(DSTROOT)/$(FW_VERSION_DIR)/Resources/Info.plist 91 $(INSTALL_FILE) $(LOCAL_FW_RES_DIR)/version.plist \ 92 $(DSTROOT)/$(FW_VERSION_DIR)/Resources/version.plist 93 $(INSTALL_DIRECTORY) $(DSTROOT)/$(FW_VERSION_DIR)/Resources/English.lproj 94 $(INSTALL_FILE) $(LOCAL_FW_RES_DIR)/English.lproj/InfoPlist.strings $(DSTROOT)/$(FW_VERSION_DIR)/Resources/English.lproj 95 $(LN) -vfsh $(VERSION) $(DSTROOT)/$(FW_DIR)/Versions/Current 96 $(INSTALL_DIRECTORY) $(DSTROOT)/$(FW_VERSION_DIR)/Headers 97 $(LN) -vfsh Versions/Current/Headers $(DSTROOT)/$(FW_DIR)/Headers 98 $(LN) -vfh $(DSTROOT)$(FW_VERSION_DIR)$(USRINCLUDEDIR)/ruby-$(VERSION3)/ruby.h $(DSTROOT)/$(FW_DIR)/Headers/ 99 $(INSTALL_DIRECTORY) $(DSTROOT)/$(FW_VERSION_DIR)/Headers/ruby 100 # fix #include <ruby.h> for BridgeSupport 101 for h in $(DSTROOT)$(FW_VERSION_DIR)$(USRINCLUDEDIR)/ruby-$(VERSION3)/*/*.h; do \ 102 $(SED) -i '' -e 's:#include <ruby\.h>:#include "ruby\.h":' \ 103 -e 's:const rb_data_type_t \*parent:const struct rb_data_type_struct \*parent:' $$h; \ 104 $(LN) -vfh $$h $(DSTROOT)/$(FW_VERSION_DIR)/Headers/ruby; \ 105 done 106 $(LN) -vfh $(shell find $(DSTROOT)$(FW_VERSION_DIR)$(USRINCLUDEDIR)/ruby-$(VERSION3) -name config.h) $(DSTROOT)/$(FW_VERSION_DIR)/Headers/ruby 107 $(LN) -vfsh . $(DSTROOT)/$(FW_VERSION_DIR)/Headers/ruby/ruby # support include "ruby/foo.h" from inside Headers/ruby 108 $(LN) -vfsh Versions/Current/Ruby $(DSTROOT)$(FW_DIR)/Ruby 109 find $(DSTROOT)$(FW_VERSION_DIR)$(USRLIBDIR) -name '*.a' -delete 110 rsync -irptgoD --include='*/' --include='*.dylib' --include='*.bundle' --include='*.so' --include='ruby' --exclude='*' $(OBJROOT)/ $(SYMROOT)/ 111 find $(SYMROOT) -type f -perm -a+x | xargs -t -n 1 dsymutil 112 find $(SYMROOT) -empty -delete 113 find $(DSTROOT)$(FW_VERSION_DIR) -type f \( -name '*.so' -or -name '*.bundle' -or -name '*.dylib' \) | xargs -t $(STRIP) -x 114 $(ECHO) Ignore signature warning, binary will be resigned 115 $(STRIP) -x $(DSTROOT)$(FW_VERSION_DIR)$(USRBINDIR)/ruby 116 codesign -f -s - $(DSTROOT)$(FW_VERSION_DIR)$(USRBINDIR)/ruby 117 $(INSTALL_DIRECTORY) $(DSTROOT)$(USRBINDIR) 118 for i in $(shell find "$(DSTROOT)$(FW_VERSION_DIR)$(USRBINDIR)" -type f); do \ 119 $(INSTALL_SCRIPT) $$i "$(DSTROOT)$(USRBINDIR)" || exit 1; \ 120 done 121 $(INSTALL_DIRECTORY) "$(DSTROOT)/$(USRLIBDIR)" 122 rsync -aim --include='*/' --include='*.dylib' --exclude='*' "$(DSTROOT)$(FW_VERSION_DIR)$(USRLIBDIR)/" "$(DSTROOT)$(USRLIBDIR)/" 123 $(LN) -vfsh ../../System/Library/Frameworks/Ruby.framework/Versions/Current/usr/lib/ruby "$(DSTROOT)$(USRLIBDIR)" 124 $(LN) -vfsh ../../System/Library/Frameworks/Ruby.framework/Versions/Current/usr/share/ri "$(DSTROOT)/usr/share/ri" 125 $(INSTALL_DIRECTORY) "$(DSTROOT)/$(SITEDIR)" 126 $(LN) -vfsh ../../../../../../../../..$(SITEDIR) "$(DSTROOT)/$(FW_VERSION_DIR)$(USRLIBDIR)/ruby/site_ruby" 127 for i in $(shell find $(DSTROOT)$(FW_VERSION_DIR)$(USRLIBDIR) -type f -name 'libruby*dylib'); do \ 128 $(MV) $$i $(DSTROOT)/$(FW_VERSION_DIR)/Ruby || exit 1; \ 129 done 130 (cd $(DSTROOT)$(FW_VERSION_DIR)$(USRLIBDIR); $(LN) -vsh ../../Ruby $$(readlink libruby.dylib)) 131 # rdar://problem/8937160 132 find $(DSTROOT) -type l -print0 | xargs -0 -t chmod -h go-w 133 $(INSTALL_DIRECTORY) $(DSTROOT)/$(MANDIR)/man1 134 $(INSTALL_FILE) $(SRCROOT)/gem.1 $(DSTROOT)$(MANDIR)/man1 135 # nuke duplicates that are only different in case 136 find $(DSTROOT) -type f | sort -fr | uniq -id | xargs -t rm 137 $(INSTALL_DIRECTORY) $(DSTROOT)/$(USRGEMDIR) 138 139OSV = $(DSTROOT)/usr/local/OpenSourceVersions 140OSL = $(DSTROOT)/usr/local/OpenSourceLicenses 141 142install-plist: 143 $(INSTALL_DIRECTORY) $(OSV) 144 $(INSTALL_FILE) $(SRCROOT)/$(Project).plist $(OSV)/$(Project).plist 145 $(INSTALL_DIRECTORY) $(OSL) 146 $(INSTALL_FILE) $(Sources)/COPYING $(OSL)/$(Project).txt 147 148ETC_DIR = $(DSTROOT)/private/etc 149 150#need rails.1 rdoc.1 testrb.1 151install-rails-placeholder: 152 $(INSTALL_FILE) -m 555 $(EXTRAS_DIR)/rails $(DSTROOT)/usr/bin 153 154install-irbrc: 155 $(INSTALL_DIRECTORY) $(ETC_DIR) 156 $(INSTALL_FILE) $(EXTRAS_DIR)/irbrc $(ETC_DIR)/irbrc 157 158# Extract the source. 159install_source:: 160 $(TAR) -C $(SRCROOT) -zxf $(SRCROOT)/$(AEP_Filename) 161 $(RM) $(SRCROOT)/$(AEP_Filename) 162 $(RMDIR) $(SRCROOT)/$(Project) 163 $(MV) $(SRCROOT)/$(AEP_ExtractDir) $(SRCROOT)/$(Project) 164 # Annotate the bison generated files 165 for f in $(SRCROOT)/$(Project)/parse.{c,h} $(SRCROOT)/$(Project)/ext/ripper/ripper.c; do \ 166 ruby -i -pe '$$_ = $$_ + %(\n/* Apple Note: For the avoidance of doubt, Apple elects to distribute this file under the terms of the BSD license. */\n) if $$_ =~ /version 2.2 of Bison/' $$f && echo "Added BSD exception to $$f"; \ 167 done 168 $(CP) $(SRCROOT)/extras/md5cc.{c,h} $(SRCROOT)/$(Project)/ext/digest/md5 169 $(CP) $(SRCROOT)/extras/sha1cc.{c,h} $(SRCROOT)/$(Project)/ext/digest/sha1 170 for patchfile in $(AEP_Patches); do \ 171 patch --verbose -d $(SRCROOT)/$(Project) -p0 < $(SRCROOT)/patches/$$patchfile || exit 1; \ 172 done 173 $(TOUCH) $(SRCROOT)/$(Project)/ext/win32ole/.document 174 awk '/EPERM/, /ELAST/ { if ($$1 == "#define" ) {if ($$2 !="ELAST") { print $$2;} else nextfile } else next}' < /usr/include/sys/errno.h >> $(SRCROOT)/$(Project)/defs/known_errors.def 175 $(SORT) -o $(SRCROOT)/$(Project)/defs/known_errors.def -u $(SRCROOT)/$(Project)/defs/known_errors.def 176 $(RM) $(SRCROOT)/$(Project)/known_errors.inc 177