mapbox / mapbox-gl-native

Interactive, thoroughly customizable maps in native Android, iOS, macOS, Node.js, and Qt applications, powered by vector tiles and OpenGL
https://mapbox.com/mobile
Other
4.35k stars 1.33k forks source link

Fix the iproj build target and related instructions #190

Closed ghost closed 10 years ago

ghost commented 10 years ago

Starting from a freshly (a few hours ago) cloned llmr-native master branch, I ran setup-libraries.sh with no major problems, but when I tried to do a make iproj, I got this:

$ make iproj
make: *** No rule to make target `config.gypi', needed by `iproj'.  Stop.

It seems as though there isn't actually a config.gypi checked into the source anywhere, but it is referenced in the Makefile and other .gyp files. The configure script seems to have been intended to generate a config.gypi because it includes a line with:

write('config.gypi', "# Do not edit. Generated by the configure script.\n" +

However if I attempt to run ./configure, it does this:

$ ./configure
Traceback (most recent call last):
  File "./configure", line 119, in <module>
    configure_glfw3(output)
  File "./configure", line 70, in configure_glfw3
    ret = pkg_config('glfw3', options.pkgconfig_root)
  File "./configure", line 43, in pkg_config
    cmd = subprocess.Popen(['pkg-config', '--static', '--libs', pkg], stdout=subprocess.PIPE, env=env)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1308, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

So, if the proper intended build sequence for iOS is ./configure; make iproj, then it looks like the documentation needs to mention that, and the configure script needs to be debugged.

springmeyer commented 10 years ago

./setup-libraries.sh creates config.gypi so it did not actually complete successfully. Run it again and see what the error is.

springmeyer commented 10 years ago

@kkaefer - seems like the logic in setup-libraries should be moved into the Makefile to avoid this situation where a failure does not stop the process and an incomplete setup is not more obvious. I'll put this on my list.

springmeyer commented 10 years ago

Just also hit the cause of the /setup-libraries.sh failure: https://github.com/mapnik/mapnik-packaging/issues/149

ghost commented 10 years ago

I just blew away my llm-native directory and xcode derived data, cloned a fresh copy and ran .setup-libraries.sh. I got a whole bunch of stuff ending with:

**** downloading openssl-1.0.1g.tar.gz ****

**** *building openssl ****

**** unknown os/compiler version for your platform MacOSX ****

Configuring for 
Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [sctp] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags]

pick os/compiler from:
BC-32 BS2000-OSD BSD-generic32 BSD-generic64 BSD-ia64 BSD-sparc64 BSD-sparcv8 
BSD-x86 BSD-x86-elf BSD-x86_64 Cygwin Cygwin-pre1.3 DJGPP MPE/iX-gcc OS2-EMX 
OS390-Unix QNX6 QNX6-i386 ReliantUNIX SINIX SINIX-N UWIN VC-CE VC-WIN32 
VC-WIN64A VC-WIN64I aix-cc aix-gcc aix3-cc aix64-cc aix64-gcc android 
android-armv7 android-x86 aux3-gcc beos-x86-bone beos-x86-r5 bsdi-elf-gcc cc 
cray-j90 cray-t3e darwin-i386-cc darwin-ppc-cc darwin64-ppc-cc 
darwin64-x86_64-cc dgux-R3-gcc dgux-R4-gcc dgux-R4-x86-gcc dist gcc hpux-cc 
hpux-gcc hpux-ia64-cc hpux-ia64-gcc hpux-parisc-cc hpux-parisc-cc-o4 
hpux-parisc-gcc hpux-parisc1_1-cc hpux-parisc1_1-gcc hpux-parisc2-cc 
hpux-parisc2-gcc hpux64-ia64-cc hpux64-ia64-gcc hpux64-parisc2-cc 
hpux64-parisc2-gcc hurd-x86 iphoneos-cross irix-cc irix-gcc irix-mips3-cc 
irix-mips3-gcc irix64-mips4-cc irix64-mips4-gcc linux-alpha+bwx-ccc 
linux-alpha+bwx-gcc linux-alpha-ccc linux-alpha-gcc linux-aout linux-armv4 
linux-elf linux-generic32 linux-generic64 linux-ia32-icc linux-ia64 
linux-ia64-ecc linux-ia64-icc linux-ppc linux-ppc64 linux-sparcv8 
linux-sparcv9 linux-x86_64 linux32-s390x linux64-s390x linux64-sparcv9 mingw 
mingw64 ncr-scde netware-clib netware-clib-bsdsock netware-clib-bsdsock-gcc 
netware-clib-gcc netware-libc netware-libc-bsdsock netware-libc-bsdsock-gcc 
netware-libc-gcc newsos4-gcc nextstep nextstep3.3 osf1-alpha-cc osf1-alpha-gcc 
purify qnx4 rhapsody-ppc-cc sco5-cc sco5-gcc solaris-sparcv7-cc 
solaris-sparcv7-gcc solaris-sparcv8-cc solaris-sparcv8-gcc solaris-sparcv9-cc 
solaris-sparcv9-gcc solaris-x86-cc solaris-x86-gcc solaris64-sparcv9-cc 
solaris64-sparcv9-gcc solaris64-x86_64-cc solaris64-x86_64-gcc sunos-gcc 
tandem-c89 tru64-alpha-cc uClinux-dist uClinux-dist64 ultrix-cc ultrix-gcc 
unixware-2.0 unixware-2.1 unixware-7 unixware-7-gcc vos-gcc vxworks-mips 
vxworks-ppc405 vxworks-ppc60x vxworks-ppc750 vxworks-ppc750-debug 
vxworks-ppc860 vxworks-ppcgen vxworks-simlinux debug debug-BSD-x86-elf 
debug-Cygwin debug-VC-WIN32 debug-VC-WIN64A debug-VC-WIN64I debug-ben 
debug-ben-darwin64 debug-ben-debug debug-ben-debug-64 debug-ben-macos 
debug-ben-macos-gcc46 debug-ben-no-opt debug-ben-openbsd 
debug-ben-openbsd-debug debug-ben-strict debug-bodo debug-darwin-i386-cc 
debug-darwin-ppc-cc debug-geoff32 debug-geoff64 debug-levitte-linux-elf 
debug-levitte-linux-elf-extreme debug-levitte-linux-noasm 
debug-levitte-linux-noasm-extreme debug-linux-elf debug-linux-elf-noefence 
debug-linux-generic32 debug-linux-generic64 debug-linux-ia32-aes 
debug-linux-pentium debug-linux-ppro debug-linux-x86_64 debug-rse 
debug-solaris-sparcv8-cc debug-solaris-sparcv8-gcc debug-solaris-sparcv9-cc 
debug-solaris-sparcv9-gcc debug-steve-opt debug-steve32 debug-steve64 
debug-ulf debug-vos-gcc 

NOTE: If in doubt, on Unix-ish systems use './config'.

Checking the build log I saved from before, it also did the same thing last time, but I thought everything was fine since there wasn't any obvious error message at the bottom.

ghost commented 10 years ago

@springmeyer I think I found the problem. On my machine, when I add an echo ${PLATFORM} to that build script, it evaluates to MacOSX, but the script is looking for Darwin.

No clue whether Darwin is correct somewhere, but it's wrong on my box.

springmeyer commented 10 years ago

@wsnook yes, I'm aware of the problem and am working on a fix. Did you miss my comment above? https://github.com/mapbox/llmr-native/issues/190#issuecomment-42875700

ghost commented 10 years ago

Sorry, I got the impression you were busy elsewhere and still hadn't tracked it down.

edit: And I just realized that perhaps you were referring to my comment with the error message rather than the one with the solution.

springmeyer commented 10 years ago

Okay, sorry about the confusion. Can you try ./setup-libraries.sh again? Just pushed a fix for the openssl build regression: https://github.com/mapnik/mapnik-packaging/commit/7f0bee94c528512f20776ef7a8d29adc9a0e8eaa. I'm not sure if this will work on all iPhone targets, but does work on Mac OSX.

ghost commented 10 years ago

OpenSSL is fine now, or at least it doesn't kill the setup script. When it gets down to boost though, this happens:

**** bootstrapping boost ****

-n Building Boost.Build engine with toolset clang... 
tools/build/v2/engine/bin.macosxx86_64/b2
-n Detecting Python version... 
2.7
-n Detecting Python root... 
/System/Library/Frameworks/Python.framework/Versions/2.7
-n Unicode/ICU support for Boost.Regex?... 
not found.
Generating Boost.Build configuration in project-config.jam...

Bootstrapping is done. To build, run:

    ./b2

To adjust configuration, edit 'project-config.jam'.
Further information:

   - Command line help:
     ./b2 --help

   - Getting started guide: 
     http://www.boost.org/more/getting_started/unix-variants.html

   - Boost.Build documentation:
     http://www.boost.org/boost-build2/doc/html/index.html

**** compiling boost ****

**** building bcp ****

link.jam: No such file or directory
Performing configuration checks

    - has_icu builds           : no

**** installing headers with bcp ****

no errors detected
no errors detected
no errors detected
 24M    bcp_staging/boost/
     ...done
*making universal libs*
*merging /Users/b/Documents/iOS/llmr-native/mapnik-packaging/osx/out/build-cpp11-libcpp-x86_64*
*merging /Users/b/Documents/iOS/llmr-native/mapnik-packaging/osx/out/build-cpp11-libcpp-arm64*
*merging /Users/b/Documents/iOS/llmr-native/mapnik-packaging/osx/out/build-cpp11-libcpp-armv7s*
*merging /Users/b/Documents/iOS/llmr-native/mapnik-packaging/osx/out/build-cpp11-libcpp-armv7*
*merging /Users/b/Documents/iOS/llmr-native/mapnik-packaging/osx/out/build-cpp11-libcpp-i386*
*making universal libcrypto.a*
Architectures in the fat file: /Users/b/Documents/iOS/llmr-native/mapnik-packaging/osx/out/build-cpp11-libcpp-universal/lib/libcrypto.a are: x86_64 
*making universal libcurl.a*
Architectures in the fat file: /Users/b/Documents/iOS/llmr-native/mapnik-packaging/osx/out/build-cpp11-libcpp-universal/lib/libcurl.a are: x86_64 
*making universal libglfw3.a*
Architectures in the fat file: /Users/b/Documents/iOS/llmr-native/mapnik-packaging/osx/out/build-cpp11-libcpp-universal/lib/libglfw3.a are: x86_64 
*making universal libpng.a*
Architectures in the fat file: /Users/b/Documents/iOS/llmr-native/mapnik-packaging/osx/out/build-cpp11-libcpp-universal/lib/libpng.a are: x86_64 armv7s armv7 i386 arm64 
*making universal libpng16.a*
Architectures in the fat file: /Users/b/Documents/iOS/llmr-native/mapnik-packaging/osx/out/build-cpp11-libcpp-universal/lib/libpng16.a are: x86_64 armv7s armv7 i386 arm64 
*making universal libssl.a*
Architectures in the fat file: /Users/b/Documents/iOS/llmr-native/mapnik-packaging/osx/out/build-cpp11-libcpp-universal/lib/libssl.a are: x86_64 
*making universal libuv.a*
Architectures in the fat file: /Users/b/Documents/iOS/llmr-native/mapnik-packaging/osx/out/build-cpp11-libcpp-universal/lib/libuv.a are: x86_64 armv7s armv7 i386 arm64 
Traceback (most recent call last):
  File "./configure", line 119, in <module>
    configure_glfw3(output)
  File "./configure", line 70, in configure_glfw3
    ret = pkg_config('glfw3', options.pkgconfig_root)
  File "./configure", line 43, in pkg_config
    cmd = subprocess.Popen(['pkg-config', '--static', '--libs', pkg], stdout=subprocess.PIPE, env=env)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1308, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
springmeyer commented 10 years ago

the pkg-config error should be caught now by https://github.com/mapbox/llmr-native/commit/6538f580ce52259ff837b85622f0553d0d0c5885

ghost commented 10 years ago

Running it again after a brew install pkgconfig worked and setup-libraries.sh ended with

creating  ./config.gypi
creating  ./config.mk

Does the hyphen matter for brew install pkg-config vs brew install pkgconfig? I did it without, and your commit has pkg-config.

springmeyer commented 10 years ago

hyphen does not matter for homebrew AFAICT, I think it aliases things.

ghost commented 10 years ago

make iproj works, and it runs on 32 bit iPhone simulator, 64 bit iPhone simulator, and my iPhone 5s.

The only thing is that there aren't any labels on any of the roads, so I'm guessing there's some other step I've gotta do.

screenshot 2014 05 12 15 05 01

incanus commented 10 years ago

Nope @wsnook, this is tracking at https://github.com/mapbox/llmr-native/issues/162. Labels are not in a great place right now and build process doesn't affect this.

ghost commented 10 years ago

Okay, well for the purposes of this ticket, that's good. @springmeyer can we close this now?

kkaefer commented 10 years ago

Awesome! Always good to have someone with a clean build machine :)