From: Glenn Morris Date: Sun, 16 Sep 2012 18:49:00 +0000 (-0700) Subject: Increase compartmentalization of Nextstep builds rules, X-Git-Tag: emacs-24.2.90~269^2~74 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=83da1b5565d518aa02984bf2f474c56eb61f41ef;p=emacs.git Increase compartmentalization of Nextstep builds rules, and store Emacs version number in fewer versioned files. * configure.ac (ns_appsrc): Use relative names. (ns_frag): Remove. (Info-gnustep.plist, Emacs.desktop, Info.plist, InfoPlist.strings) (nextstep/Makefile): Generate these nextstep files. (SUBDIR_MAKEFILES): Add nextstep. * Makefile.in (clean, distclean, bootstrap-clean): Add nextstep. * make-dist (nextstep/templates): Add directory. (nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj): Remove. (nextstep/Cocoa/Emacs.base/Contents) (nextstep/GNUstep/Emacs.base/Resources): Update contents. * .bzrignore: Add some nextstep files. * admin/admin.el (set-version): No more need to set nextstep versions. (set-copyright): Update for moved nextstep files. * nextstep/Makefile.in: New file. * nextstep/templates: New directory. * nextstep/templates/Emacs.desktop.in, nextstep/templates/Info-gnustep.plist.in: * nextstep/templates/Info.plist.in, nextstep/templates/InfoPlist.strings.in: Move here from various Cocoa/, GNUstep/ locations. Let configure set the version number. * nextstep/Cocoa/Emacs.base/Contents/Info.plist: * nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings: * nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist: * nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop: Move to templates/. * nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj: Remove directory. * src/Makefile.in (ns_appdir, ns_appbindir, ns_appsrc): Remove variables. (ns_frag): Remove. (ns-app): Move here from ns.mk, and simplify. (clean): Simplify nextstep entry. * src/ns.mk: Remove file. --- diff --git a/ChangeLog b/ChangeLog index 8dfe5f2746b..ab7864578b3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2012-09-16 Glenn Morris + + Increase compartmentalization of Nextstep builds rules, + and store Emacs version number in fewer versioned files. + * configure.ac (ns_appsrc): Use relative names. + (ns_frag): Remove. + (Info-gnustep.plist, Emacs.desktop, Info.plist, InfoPlist.strings) + (nextstep/Makefile): Generate these nextstep files. + (SUBDIR_MAKEFILES): Add nextstep. + * Makefile.in (clean, distclean, bootstrap-clean): Add nextstep. + * make-dist (nextstep/templates): Add directory. + (nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj): Remove. + (nextstep/Cocoa/Emacs.base/Contents) + (nextstep/GNUstep/Emacs.base/Resources): Update contents. + 2012-09-15 Paul Eggert Port better to POSIX hosts lacking _setjmp (Bug#12446). diff --git a/Makefile.in b/Makefile.in index 6ed32491a66..9bb85967930 100644 --- a/Makefile.in +++ b/Makefile.in @@ -737,6 +737,7 @@ clean: FRC -(cd doc/lispref && $(MAKE) $(MFLAGS) clean) -(cd doc/lispintro && $(MAKE) $(MFLAGS) clean) (cd leim; $(MAKE) $(MFLAGS) clean) + (cd nextstep && $(MAKE) $(MFLAGS) clean) ### `bootclean' ### Delete all files that need to be remade for a clean bootstrap. @@ -763,6 +764,7 @@ distclean: FRC (cd doc/lispintro && $(MAKE) $(MFLAGS) distclean) (cd leim; $(MAKE) $(MFLAGS) distclean) (cd lisp; $(MAKE) $(MFLAGS) distclean) + (cd nextstep && $(MAKE) $(MFLAGS) distclean) ${top_distclean} ### `bootstrap-clean' @@ -780,6 +782,7 @@ bootstrap-clean: FRC -(cd doc/lispintro && $(MAKE) $(MFLAGS) maintainer-clean) (cd leim; $(MAKE) $(MFLAGS) maintainer-clean) (cd lisp; $(MAKE) $(MFLAGS) bootstrap-clean) + (cd nextstep && $(MAKE) $(MFLAGS) maintainer-clean) [ ! -f config.log ] || mv -f config.log config.log~ ${top_bootclean} diff --git a/admin/ChangeLog b/admin/ChangeLog index 25eed8af5e3..27765a078f6 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,3 +1,8 @@ +2012-09-16 Glenn Morris + + * admin.el (set-version): No more need to set nextstep versions. + (set-copyright): Update for moved nextstep files. + 2012-09-13 Paul Eggert Simplify SIGIO usage (Bug#12408). diff --git a/admin/admin.el b/admin/admin.el index 6d729214bd0..b076bb67dd1 100644 --- a/admin/admin.el +++ b/admin/admin.el @@ -126,39 +126,7 @@ Root must be the root of an Emacs source tree." (set-version-in-file root "nt/emacsclient.rc" comma-space-version (rx (and "\"ProductVersion\"" (0+ space) ?, (0+ space) ?\" (submatch (1+ (in "0-9, "))) - "\\0\"")))) - ;; nextstep. - (set-version-in-file - root "nextstep/Cocoa/Emacs.base/Contents/Info.plist" - version (rx (and "CFBundleGetInfoString" (1+ anything) "Emacs" (1+ space) - (submatch (1+ (in "0-9.")))))) - (set-version-in-file - root "nextstep/Cocoa/Emacs.base/Contents/Info.plist" - version (rx (and "CFBundleShortVersionString" (1+ not-newline) ?\n - (0+ not-newline) "" (0+ space) - (submatch (1+ (in "0-9.")))))) - (set-version-in-file - root "nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings" - version (rx (and "CFBundleShortVersionString" (0+ space) ?= (0+ space) - ?\" (0+ space) "Version" (1+ space) - (submatch (1+ (in "0-9.")))))) - (set-version-in-file - root "nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings" - version (rx (and "CFBundleGetInfoString" (0+ space) ?= (0+ space) - ?\" (0+ space) "Emacs version" (1+ space) - (submatch (1+ (in "0-9.")))))) - (set-version-in-file - root "nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist" - version (rx (and "ApplicationRelease" (0+ space) ?= (0+ space) - ?\" (0+ space) (submatch (1+ (in "0-9.")))))) - (set-version-in-file - root "nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist" - version (rx (and "FullVersionID" (0+ space) ?= (0+ space) - ?\" (0+ space) "Emacs" (1+ space) - (submatch (1+ (in "0-9.")))))) - (set-version-in-file - root "nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop" - version (rx (and "Version=" (submatch (1+ (in "0-9."))))))) + "\\0\""))))) ;; Note this makes some assumptions about form of short copyright. (defun set-copyright (root copyright) @@ -188,16 +156,16 @@ Root must be the root of an Emacs source tree." (string-match "\\(.*[0-9]\\{4\\} *\\)\\(.*\\)" copyright) ;; nextstep. (set-version-in-file - root "nextstep/Cocoa/Emacs.base/Contents/Info.plist" + root "nextstep/templates/Info.plist.in" copyright (rx (and "CFBundleGetInfoString" (1+ anything) "Emacs" (1+ space) (1+ (in "0-9.")) (1+ space) (submatch (1+ (not (in ?\<))))))) (set-version-in-file - root "nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings" + root "nextstep/templates/InfoPlist.strings.in" copyright (rx (and "NSHumanReadableCopyright" (0+ space) ?\= (0+ space) ?\" (submatch (1+ (not (in ?\"))))))) (set-version-in-file - root "nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist" + root "nextstep/templates/Info-gnustep.plist.in" copyright (rx (and "Copyright" (0+ space) ?\= (0+ space) ?\" (submatch (1+ (not (in ?\"))))))) (when (string-match "\\([0-9]\\{4\\}\\)" copyright) diff --git a/configure.ac b/configure.ac index f810c839587..38a7613d84a 100644 --- a/configure.ac +++ b/configure.ac @@ -1461,13 +1461,13 @@ if test "${with_ns}" != no; then ns_appdir=`pwd`/nextstep/Emacs.app ns_appbindir=${ns_appdir}/Contents/MacOS ns_appresdir=${ns_appdir}/Contents/Resources - ns_appsrc=${srcdir}/nextstep/Cocoa/Emacs.base + ns_appsrc=Cocoa/Emacs.base elif test -f $GNUSTEP_CONFIG_FILE; then NS_IMPL_GNUSTEP=yes ns_appdir=`pwd`/nextstep/Emacs.app ns_appbindir=${ns_appdir} ns_appresdir=${ns_appdir}/Resources - ns_appsrc=${srcdir}/nextstep/GNUstep/Emacs.base + ns_appsrc=GNUstep/Emacs.base dnl FIXME sourcing this several times in subshells seems inefficient. GNUSTEP_SYSTEM_HEADERS="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_HEADERS)" GNUSTEP_SYSTEM_LIBRARIES="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_LIBRARIES)" @@ -1521,7 +1521,6 @@ AC_SUBST(TEMACS_LDFLAGS2) INSTALL_ARCH_INDEP_EXTRA=install-etc ns_self_contained=no -ns_frag=/dev/null NS_OBJ= NS_OBJC_OBJ= if test "${HAVE_NS}" = yes; then @@ -1548,7 +1547,6 @@ if test "${HAVE_NS}" = yes; then leimdir="\${ns_appresdir}/leim" INSTALL_ARCH_INDEP_EXTRA= fi - ns_frag=$srcdir/src/ns.mk NS_OBJC_OBJ="nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o" fi CFLAGS="$tmp_CFLAGS" @@ -1558,7 +1556,6 @@ AC_SUBST(ns_self_contained) AC_SUBST(NS_OBJ) AC_SUBST(NS_OBJC_OBJ) AC_SUBST(LIB_STANDARD) -AC_SUBST_FILE(ns_frag) ## $window_system is now set to the window system we will ## ultimately use. @@ -4484,6 +4481,16 @@ fi test "${exec_prefix}" != NONE && exec_prefix=`echo "${exec_prefix}" | sed 's,\([^/]\)/*$,\1,'`] +if test "$HAVE_NS" = "yes"; then + if test "$NS_IMPL_GNUSTEP" = yes; then + AC_CONFIG_FILES([nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist:nextstep/templates/Info-gnustep.plist.in \ + nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop:nextstep/templates/Emacs.desktop.in]) + else + AC_CONFIG_FILES([nextstep/Cocoa/Emacs.base/Contents/Info.plist:nextstep/templates/Info.plist.in \ + nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings:nextstep/templates/InfoPlist.strings.in]) + fi +fi + dnl Obviously there is duplication here wrt $SUBDIR_MAKEFILES. dnl You _can_ use that variable in AC_CONFIG_FILES, so long as any directory dnl using automake (ie lib/) is explicitly listed and not "hidden" in a variable @@ -4492,12 +4499,12 @@ dnl This will work, but you get a config.status that is not quite right dnl (see http://lists.gnu.org/archive/html/bug-autoconf/2008-08/msg00028.html). dnl That doesn't have any obvious consequences for Emacs, but on the whole dnl it seems better to just live with the duplication. -SUBDIR_MAKEFILES="lib/Makefile lib-src/Makefile oldXMenu/Makefile doc/emacs/Makefile doc/misc/Makefile doc/lispintro/Makefile doc/lispref/Makefile src/Makefile lwlib/Makefile lisp/Makefile leim/Makefile" +SUBDIR_MAKEFILES="lib/Makefile lib-src/Makefile oldXMenu/Makefile doc/emacs/Makefile doc/misc/Makefile doc/lispintro/Makefile doc/lispref/Makefile src/Makefile lwlib/Makefile lisp/Makefile leim/Makefile nextstep/Makefile" AC_CONFIG_FILES([Makefile lib/Makefile lib-src/Makefile oldXMenu/Makefile \ doc/emacs/Makefile doc/misc/Makefile doc/lispintro/Makefile \ doc/lispref/Makefile src/Makefile lwlib/Makefile lisp/Makefile \ - leim/Makefile]) + leim/Makefile nextstep/Makefile]) dnl test/ is not present in release tarfiles. opt_makefile=test/automated/Makefile diff --git a/make-dist b/make-dist index 28d2ec15214..0432d9c9e5f 100755 --- a/make-dist +++ b/make-dist @@ -287,10 +287,10 @@ for subdir in site-lisp \ `find etc lisp admin -type d` \ doc doc/emacs doc/misc doc/man doc/lispref doc/lispintro \ info m4 msdos \ - nextstep nextstep/Cocoa nextstep/Cocoa/Emacs.base \ + nextstep nextstep/templates \ + nextstep/Cocoa nextstep/Cocoa/Emacs.base \ nextstep/Cocoa/Emacs.base/Contents \ nextstep/Cocoa/Emacs.base/Contents/Resources \ - nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj \ nextstep/GNUstep \ nextstep/GNUstep/Emacs.base \ nextstep/GNUstep/Emacs.base/Resources @@ -406,21 +406,21 @@ echo "Making links to \`nextstep'" (cd nextstep ln ChangeLog README INSTALL ../${tempdir}/nextstep) +echo "Making links to \`nextstep/templates'" +(cd nextstep/templates + ln Emacs.desktop.in Info-gnustep.plist.in Info.plist.in InfoPlist.strings.in../../${tempdir}/nextstep/templates) + echo "Making links to \`nextstep/Cocoa/Emacs.base/Contents'" (cd nextstep/Cocoa/Emacs.base/Contents - ln Info.plist PkgInfo ../../../../${tempdir}/nextstep/Cocoa/Emacs.base/Contents) + ln PkgInfo ../../../../${tempdir}/nextstep/Cocoa/Emacs.base/Contents) echo "Making links to \`nextstep/Cocoa/Emacs.base/Contents/Resources'" (cd nextstep/Cocoa/Emacs.base/Contents/Resources ln Credits.html *.icns ../../../../../${tempdir}/nextstep/Cocoa/Emacs.base/Contents/Resources) -echo "Making links to \`nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj'" -(cd nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj - ln InfoPlist.strings ../../../../../../${tempdir}/nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj) - echo "Making links to \`nextstep/GNUstep/Emacs.base/Resources'" (cd nextstep/GNUstep/Emacs.base/Resources - ln Emacs.desktop Info-gnustep.plist README emacs.tiff ../../../../${tempdir}/nextstep/GNUstep/Emacs.base/Resources ) + ln README emacs.tiff ../../../../${tempdir}/nextstep/GNUstep/Emacs.base/Resources ) echo "Making links to \`oldXMenu'" (cd oldXMenu diff --git a/nextstep/ChangeLog b/nextstep/ChangeLog index 6451f7a7322..be73bc1f168 100644 --- a/nextstep/ChangeLog +++ b/nextstep/ChangeLog @@ -1,3 +1,17 @@ +2012-09-16 Glenn Morris + + * Makefile.in: New file. + * templates: New directory. + * templates/Emacs.desktop.in, templates/Info-gnustep.plist.in: + * templates/Info.plist.in, templates/InfoPlist.strings.in: + Move here from various Cocoa/, GNUstep/ locations. + Let configure set the version number. + * Cocoa/Emacs.base/Contents/Info.plist: + * Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings: + * GNUstep/Emacs.base/Resources/Info-gnustep.plist: + * GNUstep/Emacs.base/Resources/Emacs.desktop: Move to templates/. + * Cocoa/Emacs.base/Contents/Resources/English.lproj: Remove directory. + 2012-04-07 Glenn Morris * Cocoa/Emacs.base/Contents/Info.plist: diff --git a/nextstep/Cocoa/Emacs.base/Contents/Info.plist b/nextstep/Cocoa/Emacs.base/Contents/Info.plist deleted file mode 100644 index f5490f613fd..00000000000 --- a/nextstep/Cocoa/Emacs.base/Contents/Info.plist +++ /dev/null @@ -1,589 +0,0 @@ - - - - - - - CFBundleDevelopmentRegion - English - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - text - txt - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Plain text document - CFBundleTypeOSTypes - - TEXT - utxt - - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - html - htm - shtm - shtml - jsp - asp - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - HTML document - CFBundleTypeOSTypes - - HTML - - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - markdown - mkdn - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Markdown document - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - css - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - CSS style sheet - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - xhtml - xhtm - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - XHTML document - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - xml - xsl - xslt - xbl - xul - rdf - dtd - xsd - xsdl - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - XML document - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - sgml - sgm - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - SGML document - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - yml - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - YAML document - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - js - JS - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - JavaScript script - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - php - php3 - php4 - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - PHP script - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - tcl - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Tcl script - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - rb - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Ruby script - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - py - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Python script - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - pl - pm - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Perl script - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - sh - csh - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Shell script - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - h - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - C Header Source File - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - c - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - C Source File - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - hh - hp - hpp - hxx - h++ - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - C++ Header Source File - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - cc - cp - cpp - cxx - c++ - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - C++ Source File - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - m - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Objective-C Source File - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - s - asm - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Assembly Source File - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - java - jav - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Java Source File - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - f - for - f77 - f90 - f95 - f99 - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Fortran Source File - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - pas - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Pascal Source file - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - ada - adb - ads - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Ada Source File - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - el - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Emacs Lisp Source File - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - hs - lhs - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Haskell Source File - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - lua - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - Lua Source File - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - pro - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - IDL Procedure File - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - gp - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - gnuplot file - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - bib - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - BibTeX document - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - tex - ltx - ctx - latex - texi - - CFBundleTypeIconFile - document.icns - CFBundleTypeName - TeX document - CFBundleTypeRole - Editor - - - CFBundleTypeExtensions - - * - - CFBundleTypeName - All - CFBundleTypeOSTypes - - **** - - CFBundleTypeRole - Viewer - - - - NSServices - - - NSMenuItem - - default - Emacs.app/New Buffer Containing Selection - - NSMessage - requestService - NSUserData - open-selection - NSPortName - Emacs - NSSendTypes - - NSStringPboardType - - - - NSMenuItem - - default - Emacs.app/Open Selected File - - NSMessage - requestService - NSUserData - open-file - NSPortName - Emacs - NSSendTypes - - NSStringPboardType - - - - NSMenuItem - - default - Emacs.app/Email Selection - - NSMessage - requestService - NSUserData - mail-selection - NSPortName - Emacs - NSSendTypes - - NSStringPboardType - - - - NSMenuItem - - default - Emacs.app/Send Email to Selected Address - - NSMessage - requestService - NSUserData - mail-to - NSPortName - Emacs - NSSendTypes - - NSStringPboardType - - - - - CFBundleExecutable - Emacs - CFBundleGetInfoString - Emacs 24.2.50 Copyright (C) 2012 Free Software Foundation, Inc. - CFBundleIconFile - Emacs.icns - CFBundleIdentifier - org.gnu.Emacs - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Emacs - CFBundlePackageType - APPL - - CFBundleShortVersionString - 24.2.50 - CFBundleSignature - EMAx - - CFBundleVersion - 9.0 - NSPrincipalClass - EmacsApp - CFBundleURLTypes - - - CFBundleURLName - Email Address URL - CFBundleURLSchemes - - mailto - - - - - diff --git a/nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings b/nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings deleted file mode 100644 index 7655c0ca8ec..00000000000 --- a/nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Localized versions of Info.plist keys */ - -CFBundleName = "Emacs"; -CFBundleShortVersionString = "Version 24.2.50"; -CFBundleGetInfoString = "Emacs version 24.2.50, NS Windowing"; -NSHumanReadableCopyright = "Copyright (C) 2012 Free Software Foundation, Inc."; diff --git a/nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop b/nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop deleted file mode 100644 index a36eafaadb0..00000000000 --- a/nextstep/GNUstep/Emacs.base/Resources/Emacs.desktop +++ /dev/null @@ -1,11 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Type=Application -Version=24.2.50 -Categories=GNUstep -Name=Emacs -Comment=GNU Emacs for NeXT/Open/GNUstep and OS X -Icon=emacs.tiff -Exec=openapp Emacs.app -#TryExec=Emacs.app -FilePattern=Emacs.app;Emacs diff --git a/nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist b/nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist deleted file mode 100644 index 6cde01b0d05..00000000000 --- a/nextstep/GNUstep/Emacs.base/Resources/Info-gnustep.plist +++ /dev/null @@ -1,136 +0,0 @@ -{ - ApplicationDescription = "GNU Emacs for GNUstep / OS X"; - ApplicationIcon = emacs.tiff; - ApplicationName = Emacs; - ApplicationRelease = "24.2.50"; - Authors = ( - "Adrian Robert (GNUstep)", - "Christophe de Dinechin (MacOS X)", - "Scott Bender (OpenStep)", - "Christian Limpach (NeXTstep)", - "Carl Edman (NeXTstep)", - "..see etc/NEXTSTEP" - ); - Copyright = "Copyright (C) 2012 Free Software Foundation, Inc."; - CopyrightDescription = "Released under the GNU General Public License Version 3 or later"; - FullVersionID = "Emacs 24.2.50, NS Windowing"; - NSExecutable = Emacs; - NSIcon = emacs.tiff; - NSPrincipalClass = NSApplication; - NSRole = Application; - NSTypes = ( - { - NSDocumentClass = ""; - NSHumanReadableName = ""; - NSIcon = ""; - NSName = ""; - NSRole = ""; - NSUnixExtensions = ( - txt - ); - }, - { - NSDocumentClass = ""; - NSHumanReadableName = ""; - NSIcon = ""; - NSName = ""; - NSRole = ""; - NSUnixExtensions = ( - c, - h - ); - }, - { - NSDocumentClass = ""; - NSHumanReadableName = ""; - NSIcon = ""; - NSName = ""; - NSRole = ""; - NSUnixExtensions = ( - m - ); - }, - { - NSDocumentClass = ""; - NSHumanReadableName = ""; - NSIcon = ""; - NSName = ""; - NSRole = ""; - NSUnixExtensions = ( - C, - cpp, - H, - cc - ); - }, - { - NSDocumentClass = ""; - NSHumanReadableName = ""; - NSIcon = ""; - NSName = ""; - NSRole = ""; - NSUnixExtensions = ( - java - ); - }, - { - NSDocumentClass = ""; - NSHumanReadableName = ""; - NSIcon = ""; - NSName = ""; - NSRole = ""; - NSUnixExtensions = ( - el - ); - }, - { - NSDocumentClass = ""; - NSHumanReadableName = ""; - NSIcon = ""; - NSName = ""; - NSRole = ""; - NSUnixExtensions = ( - * - ); - } - ); - NSServices = ( - { - NSPortName = Emacs; - NSMessage = requestService; - NSUserData = open-selection; - NSSendTypes = (NSStringPboardType); - NSMenuItem = { - default = "Emacs.app/New Buffer Containing Selection"; - }; - }, - { - NSPortName = Emacs; - NSMessage = requestService; - NSUserData = open-file; - NSSendTypes = (NSStringPboardType); - NSMenuItem = { - default = "Emacs.app/Open Selected File"; - }; - }, - { - NSPortName = Emacs; - NSMessage = requestService; - NSUserData = mail-selection; - NSSendTypes = (NSStringPboardType); - NSMenuItem = { - default = "Emacs.app/Email Selection"; - }; - }, - { - NSPortName = Emacs; - NSMessage = requestService; - NSUserData = mail-to; - NSSendTypes = (NSStringPboardType); - NSMenuItem = { - default = "Emacs.app/Send Email to Selected Address"; - }; - }, - ); - URL = "http://www.gnu.org/software/emacs"; -} diff --git a/nextstep/Makefile.in b/nextstep/Makefile.in new file mode 100644 index 00000000000..8efb2b23043 --- /dev/null +++ b/nextstep/Makefile.in @@ -0,0 +1,68 @@ +### nextstep/Makefile for GNU Emacs + +## Copyright (C) 2012 Free Software Foundation, Inc. + +## This file is part of GNU Emacs. + +## GNU Emacs is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## GNU Emacs is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with GNU Emacs. If not, see . + +### Commentary: + +### Code: +SHELL = /bin/sh + +srcdir = @srcdir@ +EXEEXT = @EXEEXT@ + +@SET_MAKE@ +MKDIR_P = @MKDIR_P@ + +ns_appdir = @ns_appdir@ +ns_appbindir = @ns_appbindir@ +ns_appsrc = @ns_appsrc@ + +${ns_appdir}: ${srcdir}/${ns_appsrc} ${ns_appsrc} + rm -rf ${ns_appdir} + ${MKDIR_P} ${ns_appdir} + ( cd ${srcdir}/${ns_appsrc} ; tar cfh - . ) | \ + ( cd ${ns_appdir} ; umask 022; tar xf - ) + [ `cd ${srcdir} && /bin/pwd` = `/bin/pwd` ] || \ + ( cd ${ns_appsrc} ; tar cfh - . ) | \ + ( cd ${ns_appdir} ; umask 022; tar xf - ) + +${ns_appbindir}/Emacs: ${ns_appdir} ../src/emacs${EXEEXT} + ${MKDIR_P} ${ns_appbindir} + cp -f ../src/emacs${EXEEXT} ${ns_appbindir}/Emacs + +.PHONY: all + +all: ${ns_appdir} ${ns_appbindir}/Emacs + + +.PHONY: clean distclean maintainer-clean + +clean: + rm -rf ${ns_appdir} + +distclean: clean + rm -f Makefile + rm -f GNUstep/Emacs.base/Resources/Info-gnustep.plist \ + GNUstep/Emacs.base/Resources/Emacs.desktop \ + Cocoa/Emacs.base/Contents/Info.plist \ + Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings + [ `cd ${srcdir} && /bin/pwd` = `/bin/pwd` ] || rm -rf ${ns_appsrc} + +maintainer-clean: distclean + +### Makefile.in ends here diff --git a/nextstep/templates/Emacs.desktop.in b/nextstep/templates/Emacs.desktop.in new file mode 100644 index 00000000000..170f195f270 --- /dev/null +++ b/nextstep/templates/Emacs.desktop.in @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Application +Version=@version@ +Categories=GNUstep +Name=Emacs +Comment=GNU Emacs for NeXT/Open/GNUstep and OS X +Icon=emacs.tiff +Exec=openapp Emacs.app +#TryExec=Emacs.app +FilePattern=Emacs.app;Emacs diff --git a/nextstep/templates/Info-gnustep.plist.in b/nextstep/templates/Info-gnustep.plist.in new file mode 100644 index 00000000000..6da5af489fb --- /dev/null +++ b/nextstep/templates/Info-gnustep.plist.in @@ -0,0 +1,136 @@ +{ + ApplicationDescription = "GNU Emacs for GNUstep / OS X"; + ApplicationIcon = emacs.tiff; + ApplicationName = Emacs; + ApplicationRelease = "@version@"; + Authors = ( + "Adrian Robert (GNUstep)", + "Christophe de Dinechin (MacOS X)", + "Scott Bender (OpenStep)", + "Christian Limpach (NeXTstep)", + "Carl Edman (NeXTstep)", + "..see etc/NEXTSTEP" + ); + Copyright = "Copyright (C) 2012 Free Software Foundation, Inc."; + CopyrightDescription = "Released under the GNU General Public License Version 3 or later"; + FullVersionID = "Emacs @version@, NS Windowing"; + NSExecutable = Emacs; + NSIcon = emacs.tiff; + NSPrincipalClass = NSApplication; + NSRole = Application; + NSTypes = ( + { + NSDocumentClass = ""; + NSHumanReadableName = ""; + NSIcon = ""; + NSName = ""; + NSRole = ""; + NSUnixExtensions = ( + txt + ); + }, + { + NSDocumentClass = ""; + NSHumanReadableName = ""; + NSIcon = ""; + NSName = ""; + NSRole = ""; + NSUnixExtensions = ( + c, + h + ); + }, + { + NSDocumentClass = ""; + NSHumanReadableName = ""; + NSIcon = ""; + NSName = ""; + NSRole = ""; + NSUnixExtensions = ( + m + ); + }, + { + NSDocumentClass = ""; + NSHumanReadableName = ""; + NSIcon = ""; + NSName = ""; + NSRole = ""; + NSUnixExtensions = ( + C, + cpp, + H, + cc + ); + }, + { + NSDocumentClass = ""; + NSHumanReadableName = ""; + NSIcon = ""; + NSName = ""; + NSRole = ""; + NSUnixExtensions = ( + java + ); + }, + { + NSDocumentClass = ""; + NSHumanReadableName = ""; + NSIcon = ""; + NSName = ""; + NSRole = ""; + NSUnixExtensions = ( + el + ); + }, + { + NSDocumentClass = ""; + NSHumanReadableName = ""; + NSIcon = ""; + NSName = ""; + NSRole = ""; + NSUnixExtensions = ( + * + ); + } + ); + NSServices = ( + { + NSPortName = Emacs; + NSMessage = requestService; + NSUserData = open-selection; + NSSendTypes = (NSStringPboardType); + NSMenuItem = { + default = "Emacs.app/New Buffer Containing Selection"; + }; + }, + { + NSPortName = Emacs; + NSMessage = requestService; + NSUserData = open-file; + NSSendTypes = (NSStringPboardType); + NSMenuItem = { + default = "Emacs.app/Open Selected File"; + }; + }, + { + NSPortName = Emacs; + NSMessage = requestService; + NSUserData = mail-selection; + NSSendTypes = (NSStringPboardType); + NSMenuItem = { + default = "Emacs.app/Email Selection"; + }; + }, + { + NSPortName = Emacs; + NSMessage = requestService; + NSUserData = mail-to; + NSSendTypes = (NSStringPboardType); + NSMenuItem = { + default = "Emacs.app/Send Email to Selected Address"; + }; + }, + ); + URL = "http://www.gnu.org/software/emacs"; +} diff --git a/nextstep/templates/Info.plist.in b/nextstep/templates/Info.plist.in new file mode 100644 index 00000000000..df9708eae71 --- /dev/null +++ b/nextstep/templates/Info.plist.in @@ -0,0 +1,589 @@ + + + + + + + CFBundleDevelopmentRegion + English + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + text + txt + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Plain text document + CFBundleTypeOSTypes + + TEXT + utxt + + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + html + htm + shtm + shtml + jsp + asp + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + HTML document + CFBundleTypeOSTypes + + HTML + + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + markdown + mkdn + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Markdown document + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + css + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + CSS style sheet + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + xhtml + xhtm + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + XHTML document + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + xml + xsl + xslt + xbl + xul + rdf + dtd + xsd + xsdl + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + XML document + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + sgml + sgm + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + SGML document + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + yml + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + YAML document + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + js + JS + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + JavaScript script + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + php + php3 + php4 + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + PHP script + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + tcl + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Tcl script + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + rb + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Ruby script + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + py + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Python script + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + pl + pm + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Perl script + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + sh + csh + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Shell script + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + h + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + C Header Source File + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + c + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + C Source File + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + hh + hp + hpp + hxx + h++ + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + C++ Header Source File + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + cc + cp + cpp + cxx + c++ + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + C++ Source File + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + m + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Objective-C Source File + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + s + asm + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Assembly Source File + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + java + jav + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Java Source File + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + f + for + f77 + f90 + f95 + f99 + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Fortran Source File + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + pas + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Pascal Source file + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + ada + adb + ads + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Ada Source File + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + el + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Emacs Lisp Source File + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + hs + lhs + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Haskell Source File + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + lua + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + Lua Source File + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + pro + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + IDL Procedure File + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + gp + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + gnuplot file + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + bib + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + BibTeX document + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + tex + ltx + ctx + latex + texi + + CFBundleTypeIconFile + document.icns + CFBundleTypeName + TeX document + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + * + + CFBundleTypeName + All + CFBundleTypeOSTypes + + **** + + CFBundleTypeRole + Viewer + + + + NSServices + + + NSMenuItem + + default + Emacs.app/New Buffer Containing Selection + + NSMessage + requestService + NSUserData + open-selection + NSPortName + Emacs + NSSendTypes + + NSStringPboardType + + + + NSMenuItem + + default + Emacs.app/Open Selected File + + NSMessage + requestService + NSUserData + open-file + NSPortName + Emacs + NSSendTypes + + NSStringPboardType + + + + NSMenuItem + + default + Emacs.app/Email Selection + + NSMessage + requestService + NSUserData + mail-selection + NSPortName + Emacs + NSSendTypes + + NSStringPboardType + + + + NSMenuItem + + default + Emacs.app/Send Email to Selected Address + + NSMessage + requestService + NSUserData + mail-to + NSPortName + Emacs + NSSendTypes + + NSStringPboardType + + + + + CFBundleExecutable + Emacs + CFBundleGetInfoString + Emacs @version@ Copyright (C) 2012 Free Software Foundation, Inc. + CFBundleIconFile + Emacs.icns + CFBundleIdentifier + org.gnu.Emacs + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Emacs + CFBundlePackageType + APPL + + CFBundleShortVersionString + @version@ + CFBundleSignature + EMAx + + CFBundleVersion + 9.0 + NSPrincipalClass + EmacsApp + CFBundleURLTypes + + + CFBundleURLName + Email Address URL + CFBundleURLSchemes + + mailto + + + + + diff --git a/nextstep/templates/InfoPlist.strings.in b/nextstep/templates/InfoPlist.strings.in new file mode 100644 index 00000000000..ce9779c7ac8 --- /dev/null +++ b/nextstep/templates/InfoPlist.strings.in @@ -0,0 +1,6 @@ +/* Localized versions of Info.plist keys */ + +CFBundleName = "Emacs"; +CFBundleShortVersionString = "Version @version@"; +CFBundleGetInfoString = "Emacs version @version@, NS Windowing"; +NSHumanReadableCopyright = "Copyright (C) 2012 Free Software Foundation, Inc."; diff --git a/src/ChangeLog b/src/ChangeLog index be734134adf..e322406a0e6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,4 +1,12 @@ -2012-09-17 Kenichi Handa +2012-09-16 Glenn Morris + + * Makefile.in (ns_appdir, ns_appbindir, ns_appsrc): Remove variables. + (ns_frag): Remove. + (ns-app): Move here from ns.mk, and simplify. + (clean): Simplify nextstep entry. + * ns.mk: Remove file. + +2012-09-16 Kenichi Handa * font.c (Ffont_shape_gstring): Fix previous change; GLYPHs may not covert the last few charactes. diff --git a/src/Makefile.in b/src/Makefile.in index fe4cff5d8cc..5c16b93803e 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -255,9 +255,6 @@ MSDOS_OBJ = ## w16select.o termcap.o if MSDOS && HAVE_X_WINDOWS. MSDOS_X_OBJ = -ns_appdir=@ns_appdir@ -ns_appbindir=@ns_appbindir@ -ns_appsrc=@ns_appsrc@ NS_OBJ=@NS_OBJ@ ## nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o if HAVE_NS. NS_OBJC_OBJ=@NS_OBJC_OBJ@ @@ -501,8 +498,9 @@ $(OLDXMENU): $(OLDXMENU_TARGET) doc.o: buildobj.h -## If HAVE_NS, some ns-specific rules (for OTHER_FILES) are inserted here. -@ns_frag@ +ns-app: emacs$(EXEEXT) + cd ../nextstep && $(MAKE) $(MFLAGS) all + .PHONY: mostlyclean clean bootstrap-clean distclean maintainer-clean .PHONY: versionclean extraclean frc @@ -516,7 +514,7 @@ mostlyclean: clean: mostlyclean rm -f emacs-*.*.*$(EXEEXT) emacs$(EXEEXT) -rm -rf $(DEPDIR) - test "X$(ns_appdir)" = "X" || rm -rf $(ns_appdir) + -cd ../nextstep && $(MAKE) $(MFLAGS) clean ## bootstrap-clean is used to clean up just before a bootstrap. ## It should remove all files generated during a compilation/bootstrap, diff --git a/src/ns.mk b/src/ns.mk deleted file mode 100644 index 77fbf5845d9..00000000000 --- a/src/ns.mk +++ /dev/null @@ -1,39 +0,0 @@ -### autodeps.mk --- src/Makefile fragment for GNU Emacs - -## Copyright (C) 2008-2012 Free Software Foundation, Inc. - -## This file is part of GNU Emacs. - -## GNU Emacs is free software: you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation, either version 3 of the License, or -## (at your option) any later version. -## -## GNU Emacs is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with GNU Emacs. If not, see . - -### Commentary: - -## This is inserted in src/Makefile if HAVE_NS. - -## The only reason this is in a separate file is because $ns_appdir, -## which appears as a target, is empty on non-NS builds. Some makes -## do not like empty targets, even if they are never used. - -${ns_appdir}: ${ns_appsrc} - rm -fr ${ns_appdir} - ${MKDIR_P} ${ns_appdir} - ( cd ${ns_appsrc} ; tar cfh - . ) | ( cd ${ns_appdir} ; umask 022; tar xf - ) - -${ns_appbindir}/Emacs: emacs${EXEEXT} - ${MKDIR_P} ${ns_appbindir} - cp -f emacs${EXEEXT} ${ns_appbindir}/Emacs - -ns-app: ${ns_appdir} ${ns_appbindir}/Emacs - -### ns.mk ends here